Wow, what a difference! Thanks a lot, Pierre and Eric, this has been an eye 
opener for me.

On Saturday, September 24, 2016 at 7:26:05 PM UTC+2, Eric G wrote:
>
> Hi Antoine,
>
> I think you can use function composition like this to make it easier:
>
> List.map (viewLog >> App.map TaskLog) task.logs
>
> instead of the double List.map with helper function. This maps each 
> `viewLog log` to the TaskLog-wrapped msg type, in one step.
>
> Eric
>
>
> On Saturday, September 24, 2016 at 12:46:45 PM UTC-4, Antoine Snyers wrote:
>>
>> Hello Elm Discuss. 
>> I'm a java/javascript developer. I'm excited about learning elm. I 
>> finally switched from reading and watching to writing something myself and 
>> now I am looking for feedback and guidance on what I've done here below:
>>
>> My types in Log.elm (I don't think the definitions matter for my problem, 
>> tell me if you need them too)
>> type alias Log =
>>     { author : String
>>     , content : String
>>     }
>>     
>> type LogMsg = ...
>>
>>
>> viewLog : Log -> Html LogMsg
>>
>>
>> My model in Task.elm
>> type alias Task =
>>     { title : String
>>     , description : String
>>     , logs : List Log
>>     }
>>
>>
>> type TaskMsg
>>     = Change String
>>
>>
>> Now I thought I was going to be able to write my view like this
>> viewTask task =
>>         div []
>>         [ h1 [] [ text task.title ]
>>         , Markdown.toHtml [] task.description
>>         , List.map viewLog task.logs
>>         ]
>>
>>
>> However this has 2 problems:
>> - the third element in the second parameter of div is a list, so I have a 
>> List inside a List
>> - The inner list is not a List Html TaskMsg but a List Html LogMsg (which 
>> was extra confusing when they where both simply called Msg at first)
>>
>> After some searching and puzzling I was finally able to get the result I 
>> wanted with this code :
>> type TaskMsg
>>     = Change String
>>     | TaskLog LogMsg
>>
>>
>> viewTask : Task -> Html TaskMsg
>> viewTask task =
>>     div []
>>         (List.concat
>>             [ [ h1 [] [ text task.title ]
>>               , Markdown.toHtml [] task.description
>>               ]
>>             , (List.map transformLogList
>>                 (List.map viewLog task.logs)
>>               )
>>             ]
>>         )
>>
>>
>>
>>
>> transformLogList : Html LogMsg -> Html TaskMsg
>> transformLogList log =
>>     App.map transformLogMsg log
>>
>>
>>
>>
>> transformLogMsg : LogMsg -> TaskMsg
>> transformLogMsg logMsg =
>>     TaskLog logMsg
>>
>>
>> Even though I'm a total beginner to elm, this seems more complicated than 
>> it should be.
>> The problems that I'm thinking of:
>> - Now I need to write an update method in Task.elm that deals with 
>> LogMsg. But I wanted to contain everything that touches LogMsg in Log.elm
>> - Especially the double usage of List.map combined with App.map will be 
>> something I'll have trouble reading again when I come back to it in the 
>> future
>>
>> So what would I need to restructure or rewrite to be able to share this 
>> with a fellow elm first-timer.
>>
>> I have searched the guide, the docs, a number of blog posts and other elm 
>> repositories on github and somehow I still miss the answer...
>> I have also read this related thread: 
>> https://groups.google.com/forum/?fromgroups#!searchin/elm-discuss/list$20app$20map|sort:relevance/elm-discuss/yzaZXYKXDvI/C2UFnfovAQAJ
>> But I don't think I understand yet what it would mean to apply that 
>> suggestion to my code.
>> (Also I'm not familiar with the <| operator yet)
>>
>

-- 
You received this message because you are subscribed to the Google Groups "Elm 
Discuss" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to