On Thursday, January 26, 2017 at 3:45:24 AM UTC, Robert Lee wrote:
>
> The following fits in good enough for me.
>
> filterDiv : List (Maybe (H.Attribute msg)) -> List (Maybe (H.Html msg)) -> 
> H.Html msg
> filterDiv a n =
>     H.div (List.filterMap identity a) (List.filterMap identity n)
>

Yes, or even:

filterNode :
    (List (H.Attribute msg) -> List (H.Html msg) -> H.Html msg)
    -> List (Maybe (H.Attribute msg))
    -> List (Maybe (H.Html msg))
    -> H.Html msg
filterNode node a n =
    node (List.filterMap identity a) (List.filterMap identity n)

To make it work over all Html nodes not just divs. Then filterDiv = 
filterNode div, and so on.

I went for a slightly different approach which is to define:

when : Bool -> a -> Maybe a
when condition value =
    if (condition) then
        Just value
    else
        Nothing


required : a -> Maybe a
required value =
    Just value


optional : List (Maybe a) -> List a
optional =
    Maybe.Extra.values

Then I can make just the attributes or the child nodes optional. For 
example:

div []
  (optional
    [ contentView model content |> required
    , slideButton model |> required
    , sideNav model |> required
    , clickPlane |> when model.menuOpen
    ]
  )

I could use Just directly instead of 'required' but it has a certain visual 
appeal in that I can scan down the list and see what is always there and 
what is toggled by a condition.

P.S. I like your "List.filterMap identity", I was using Maybe.Extra.values 
for the same thing. At first I was scratching my head, why does the 
identity function make a filter over a list? Buit then I see the type of 
filterMap and how it works. I can drop Maybe.Extra now...

-- 
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 elm-discuss+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to