So function application itself is the functor, i.e., the box-like thing, right? Lifting a function of values to work on boxes containing those values corresponds with lifting a function of values to work on functions yielding those values. Right? In which case, fishing something out of the box corresponds with applying the function. Why not? With record notation you use a function to fish out a field anyway. That&#39;s very interesting. <br>
<br>Now I have this:<br><br>type Amount = Float<br>type Moment = Day -- from Data.Time.Calendar<br>data Period = Period Moment Moment<br>type Flowfunc = Period -&gt; Amount<br>f0 = const 0<br><br>-- Add and subtract flowfuncs<br>
infixl 6 ~+, ~-<br>(~+), (~-) :: Flowfunc -&gt; Flowfunc -&gt; Flowfunc<br>f ~+ g = (+) &lt;$&gt; f &lt;*&gt; g<br>f ~- g = (-) &lt;$&gt; f &lt;*&gt; g<br><br>But here I still seem to be being naive again...<br><br>-- Multiply flowfunc by a float<br>
infixl 7 ~*<br>(~*) :: Float -&gt; Flowfunc -&gt; Flowfunc<br>f ~* n = \p -&gt; n * (f p)<br>-- or with the params the other way around<br><br>I guess I could write:<br><br>f ~* n = (*) &lt;$&gt; f &lt;*&gt; const n<br><br>
but it seems clunky. Should it be a monad?<br><br>How about:<br><br>-- Sum a list of them<br>sumf :: [Flowfunc] -&gt; Flowfunc<br>sumf l = foldl (~+) f0 l<br><br>TIA,<br>Adrian.<br><br><br>