Warn about ArrowLoop instance for Kleisli Arrows
authorRoss Paterson <ross@soi.city.ac.uk>
Tue, 25 Oct 2011 15:47:46 +0000 (16:47 +0100)
committerRoss Paterson <ross@soi.city.ac.uk>
Tue, 25 Oct 2011 15:47:46 +0000 (16:47 +0100)
Suggested by Heinrich Apfelmus on the libraries list.

Control/Arrow.hs

index 012a75a..578c457 100644 (file)
@@ -274,6 +274,9 @@ class Arrow a => ArrowLoop a where
 instance ArrowLoop (->) where
     loop f b = let (c,d) = f (b,d) in c
 
+-- | Beware that for many monads (those for which the '>>=' operation
+-- is strict) this instance will /not/ satisfy the right-tightening law
+-- required by the 'ArrowLoop' class.
 instance MonadFix m => ArrowLoop (Kleisli m) where
     loop (Kleisli f) = Kleisli (liftM fst . mfix . f')
       where f' x y = f (x, snd y)