On Thursday, February 23, 2017 at 8:57:32 PM UTC, Brian Marick wrote: > > The first animal is in the Compact state, the second in Expanded, and the > last in Editable. Would you be suggesting a `Mode` like the following? > > type Mode > = Compact Animal > | Expanded Animal > | Editable Animal FormData >
Yes, that is the pattern I am working with at the moment. > I had problems with that. I too often had view code that had to know both > that it was given `FormData` and also had to take the whole `Mode` as an > argument - or had to assemble a Mode from the pieces they were given. > (Unfortunately the details are fuzzy in my memory.) > I forgot to include my help functions in the Gist. Adding them now. https://gist.github.com/rupertlssmith/c948f304ce0a99cd7ba9d6b6a061251a I also have situation where I need to write a function the uses >1 of the little products that make up a state. I wrote a mapWhenCompose function for that. I can also tell you that my first 7 attempt to write this function each occupied about 20 lines of code and none of them compiled! Then almost by chance, or was it a good nights sleep, the answer came to my no longer young and brilliant mind: mapWhenCompose : (c -> d -> Maybe a) -> (a -> d -> Maybe b) -> c -> d -> Maybe b mapWhenCompose mapWhen1 mapWhen2 func state = mapWhen1 func state |> andThen ((flip mapWhen2) state) so if you follow my pattern and write the mapWhenWithAnimal and mapWhenWithFormData functions, then you can do: editableView animal formData = ... and then call it with: mapWhenCompose mapWhenWithAnimal mapWhenWithFormData editableView mode Note also that mapWhenCompose also returns a mapWhen function so can be further composed. ==== What I really like about this pattern is that I have eliminated all Maybes from my model. But now I am using Maybes to linearize the logic and to be able to compose pieces of logic together, using Nothing to indicate a failure of a logic flow to complete. This feels like a much better way to use Maybes. -- 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.
