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.