There is a law for Functors ("mappable" structures):
List.map (f) >> List.map (g) == List.map (f >> g)
So, you can compose functions you map over data in list instead of composing
several maps on list.
> 24 сент. 2016 г., в 23:09, Antoine Snyers <[email protected]>
> написал(а):
>
> 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
>
> <https://groups.google.com/forum/?fromgroups#!searchin/elm-discuss/list$20app$20map%7Csort: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]
> <mailto:[email protected]>.
> For more options, visit https://groups.google.com/d/optout
> <https://groups.google.com/d/optout>.
--
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.