I've posted it once or twice.
newtype C m r a = C ((a -> m r) -> m r)
It's a monad, regardless of whether m is one or not. If you have something like "return" and "bind", but not exactly the same, you can make
"casting" functions
m a -> C m r a
and backwards.
Jason Dusek wrote on 19.05.2009 10:23:
2009/05/18 Miguel Mitrofanov <miguelim...@yandex.ru>:
On 19 May 2009, at 09:06, Ryan Ingram wrote:
This is a common problem with trying to use do-notation; there are
some cases where you can't make the object an instance of Monad. The
same problem holds for Data.Set; you'd can write
setBind :: Ord b => Set a -> (a -> Set b) -> Set b
setBind m f = unions (map f $ toList m)
but there is no way to use setBind for a definition of >>=
You can use a continuation trick.
Trick?
--
Jason Dusek
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe