
On April 19, 2011 23:22:12 Tyson Whitehead wrote:
ArrowLoop from MonadFix
loop' f = fst' .' loop'' (f .' arr' (second snd)) where loop'' f = mfix (\y -> f .' arr' (,y))
BTW haskellers, I've been wondering if mfix would better be defined as mfix' :: (m a -> m a) -> m a where "mfix' f = mfix (f . pure)" for the computational monads. The advantage being you can give a useful definition for structural monads as well. I was also wondering if there is a way to specify something like ... => (forall a. Applicative f a) => ... where I'm trying to express that the dictionary must be valid for all a. In the GHC documentation under point (1) of section 7.8.2 http://www.haskell.org/ghc/docs/7.0-latest/html/users_guide/other-type- extensions.html it seems to suggest the answer is no. The reason gives is because we never get to know what a is. That is the whole point though. I want to be limited to only instances like instance Applicative (a ->) where f <*> x = \u -> f u (x u) (the reader Monad and the Hask Arrow) that are valid for all a. Cheers! -Tyson