I also thought about this problem for a bit.
I came up with a slightly different solution.

I was not only not happy with storing functions in my model, but also with 
storing static values in the model (e.g. stuff that wont change often).
I think it would be nice to separate the *descriptions* of an animation 
from the *state* of an animation.

So when you actually use an animation, you need to provide an animation 
description and an animation state, this might look kinda like this:

model =
  { animationState = Animation.new 0 }

update msg model =
  case msg of
    Tick dt ->
      { model | animationState = Animation.tick dt model.animationState }

animationDescription =
  { startValue = 0, endValue = 10, speed = 2, easing = Easing.sinInOut, 
etc... }

view model =
  animate animationDescription model.animationState


On Thursday, 13 October 2016 08:29:19 UTC+2, Aaron VonderHaar wrote:
>
> As mentioned in some recent threads [1] [2], easing functions for 
> animations have been an example of where functions in the model are 
> currently used.  An alternative approach is to use a union type to indicate 
> the easing, but a suggested shortcoming of that approach is that there 
> would then be no way for downstream developers to use their own custom 
> easings.
>
> I was just thinking that this could be achieved as follows:
>
> ```
> type AdvancedEasing a
>     = Linear | InQuad | OutQuad | ...
>     | CustomEasing a
>
> type alias Easing = AdvancedEasing Never
>
> apply : Easing -> Float -> Float
>
> applyAdvanced : (a -> Float -> Float) -> AdvancedEasing a -> Float -> Float
> ```
>
> In this way, the custom easing functions (a -> Float -> Float) are moved 
> from the model to configuration.
>
> I was curious if anyone has experimented with this approach yet.
>
>
> [1]: https://groups.google.com/d/topic/elm-discuss/bOAHwSnklLc/discussion
> [2]: https://groups.google.com/d/topic/elm-discuss/9qV9iDcv-c8/discussion
>
>

-- 
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