
Vivian McPhail wrote: ...
I need the arg a to be evaluated before it gets passed to a1 and a2. This definition does the right thing when type 'a' is a function type, because it is not a value, but with something like 'm a -> (m a -> m a) -> m a' with Forkable (a -> b) the first arg gets evaluated twice, to be more concrete:
With
(and golden white) eggs
I want the 'eggs' that is passed to 'golden' to be the same as the 'eggs' that is passed to 'white', i.e. ...
Could you reduce the need for Forkable instances, by rewriting '(and golden white) eggs' as 'and golden white =<< eggs'? Or would the same piece of code also have to handle combinations such as monadic 'and golden white' and non-monadic eggs? [BTW, thanks for giving me a pretext to use the phrase non-monadic eggs!]
Tom suggested that I might be able to use the Reader monad , but I'm not clear as to how I could do this.
Please ignore that. I only mentioned it in case the sole purpose of fork was to propagate a String, which you've now explained is not so. Regards, Tom