Haskell - It39s not a monad but what is it

De openkb
Aller à : Navigation, rechercher

Sommaire

Questions

http://en.wikibooks.org/wiki/Haskell/Category_theory#Monads http://en.wikibooks.org/wiki/Haskell/Category_theory#Monads

unit :: a -> m a
join :: m (m a) -> m a

That s nice, but I have something slightly different. Glossing over the gory details, I have a type that has good unit and join functions, but its fmap is not well behaved (fmap g . fmap f is not necessarily fmap (g.f)). Because of this, it cannot be made an instance of Monad. Nonetheless, I d like to give it as much generic functionality as possible.

So my question is, what category theoretic structures are similar to monads in that they have a unit and join?

I realize that on some level, the above question is ill-defined. For monads the unit and join definitions only make sense in terms of the fmap definition. Without fmap, you can t define any of the monad laws, so any definitions of unit/join would be equally "valid." So I m looking for functions other than fmap that it might make sense to define some "not-monad" laws on these unit and join functions.

Answers

Well here s one law you should have with just unit and join. Given x :: m a,

join (unit x) = x

To show that this didn t just come from nowhere, let s start with an existing monad law:

return x >>= f = f x

Given that m >>= f = join (fmap f m)

join (fmap f (return x)) = f x

Select f = id

join (fmap id (return x)) = id x

Use the functor law that fmap id = id

join (id (return x)) = id x

Use the obvious id a = a

join (return x) = x

Source

License : cc by-sa 3.0

http://stackoverflow.com/questions/17034427/its-not-a-monad-but-what-is-it

Related

Outils personnels
Espaces de noms

Variantes
Actions
Navigation
Outils