The particular case from which the former is a generalization:
*instance Monad m => Monoid (a -> a) where* * mappend = (.)* * mempty = id* * * Here the monoid is defined for the functions within the set of values of type a. There are no null elements. 2012/10/24 Alberto G. Corona <agocor...@gmail.com> > What hiders according with my experience, the understanding of this > generalization are some mistakes. two typical mistakes from my side was to > consider an arrow as a function, and the consideration of m as a kind of > container, which it is not from the point of view of category theory. > > a -> m b > > instead of as a container, 'm b' must be considered as the set of elements > of type b (wrapped within some constructor) plus zero or more null elements > of the monad 'm', Such are elements like, for example, Nothing, the empty > list or Left . so that: > > null >>= f= null and > f >>= \x -> null= null > > in the other side (->) is an arrow of category theory, not a function.That > means that there may be weird additional things that functions are not be > permitted to have. For example, from an element in the set of 'a' may > depart many arrows to elements of 'b'. This permits the nondeterminism of > the list monad. > > A function like this: > > repeatN :: Int -> a -> [a] > > can have two interpretations: one functional interpretation, where repeatN > is a pure function with results in the list container. The other is the > category interpretation, where 'repeatN n' is a morphism that produces n > arrows from the set of the Strings to the set of String plus the empty set, > The list container is a particular case of container that hold the result > of this nondeterministic morphism (other instantiations of this > nondeterministic monad would be a set monad or whatever monad build using a > multielement container. The container type is not the essence. the essence > it is the nondeterministic nature, which, in haskell practical terms, needs > a multielement container to hold the multiple results). > > so the monadic re-ínterpretation of the repeatN signature is: > > repeatN ::Int -> a -> a + {[]} > > Here the empty list is the null element of the list monad > > in the same way: > functional signature: a -> Maybe b > monadic interpretation: a -> b + {Nothing} > > functional signature: a -> Either c b > monadic interpretation: a -> b + {Left c} > > So when i see m b in the context of a monad, I think on nothing more that > the set of values of type b (wrapped within some constructor) plus some > null elements (if they exist). > > so in essence > > a -> m b > > is a -> (b + some null elements) > > that´s a generalisation of a -> b > > where -> is an arrow, not a function (can return more than one result, can > return different things on each computation etc) > > And this instance of monoid show how kleisly is the composition and return > is the identity element > > *instance Monad m => Monoid (a -> m a) where* > * mappend = (>=>)* > * mempty = return* > * > * > > According with the above said, 'a -> m a' must be understood as the set > of monadic endomorphisms in a: > > a -> a +{null elements of the monad m} > > Which is, in essence, a -> a > > 2012/10/16 Simon Thompson <s.j.thomp...@kent.ac.uk> > >> >> Not sure I really have anything substantial to contribute, but it's >> certainly true that if you see >> >> a -> m b >> >> as a generalisation of the usual function type, a -> b, then return >> generalises the identity and >> kleisli generalises function composition. This makes the types pretty >> memorable (and often the >> definitions too). >> >> Simon >> >> >> On 16 Oct 2012, at 20:14, David Thomas <davidleotho...@gmail.com> wrote: >> >> >> class Monad m where >> >> return :: a -> m a >> >> kleisli :: (a -> m b) -> (b -> m c) -> (a -> m c) >> >> Simon Thompson | Professor of Logic and Computation >> School of Computing | University of Kent | Canterbury, CT2 7NF, UK >> s.j.thomp...@kent.ac.uk | M +44 7986 085754 | W www.cs.kent.ac.uk/~sjt >> >> >> _______________________________________________ >> Haskell-Cafe mailing list >> Haskell-Cafe@haskell.org >> http://www.haskell.org/mailman/listinfo/haskell-cafe >> > > > > -- > Alberto. > -- Alberto.
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe