
As stated, it seems precisely true. There was no implication that the
domain still be Hask.
On Sat, Jul 5, 2014 at 10:34 AM, Brent Yorgey
On Sat, Jul 05, 2014 at 11:51:10AM +0100, Julian Birch wrote:
(Another beginner here)
That's my understanding too. Functors in Haskell have to operate on the whole of Hask, which isn't true of functors in general.
As stated, this is not true: a functor F : C -> D must be defined on *all* the objects of the category C. I.e., it is still true that functors in general must operate on the whole of their domain category. I think what you are getting at is that there are (lowercase-f) functors whose domain is a *sub*category of Hask (such as the category of all types having an Ord instance, with order-preserving functions as morphisms) which cannot be extended to functors on all of Hask, and so they are not (capital-F) Functors.
-Brent
Equally, they have to map to a subset of Haskell (although that mapping could be isomorphic to Hask e.g. Identity Functor). It's the first restriction that's the most problematic, since it prevents set from being a Functor. This is fixable ( http://okmij.org/ftp/Haskell/RestrictedMonad.lhs) but not part of "standard Haskell". The second restriction basically just means you've got to do some book-keeping to get back to the original type.
Julian
On 5 July 2014 06:51, Dimitri DeFigueiredo
wrote: Oops! Sorry for the typos! Fixing that below.
Hi All,
My understanding is that a functor in Haskell is made of two "maps". One that maps objects to objects that in Hask means types into types (i.e. a type constructor) And one that maps arrows into arrows, i.e. fmap.
My understanding is that a functor F in category theory is required to preserve the domain and codomain of arrows, but it doesn't have to be injective. In other words, two objects X and Y of category C (i.e. two types in Hask) can be mapped into the same object Z (same type) in category D. As long as the "homomorphism" law holds:
F(f:X->Y) = F(f):F(X)->F(Y)
However, I don't think there is any way this mapping of types cannot be injective in Haskell. It seems that a type constructor, when called with two distinct type will always yield another two **distinct** types. (E.g. Int and Double yield Maybe Int and Maybe Double) So, it seems that Functors in Haskell are actually more restrictive than functors can be in general. Is this observation correct or did I misunderstand something?
Thanks!
Dimitri
Em 05/07/14 02:42, Dimitri DeFigueiredo escreveu:
Hi All,
My understanding is that a functor in Haskell is made of two "maps". One that maps objects to objects that in Hask means types into types (i.e. a type constructor) And one that maps arrows into arrows, i.e. fmap.
My understanding is that a functor F in category theory is required to preserve the domain and codomain of arrows, but it doesn't have to be injective. In other words, two objects X and Y of category C (i.e. two types in Hask) can be mapped into the same object Z (same type) in category Z. As long as the "homomorphism" law holds:
F(f:X->Y) = F(f):F(X)->F(Y)
However, I don't think there is any way this mapping of types cannot be injective in Haskell. It seems that a type constructor, when called with two distinct type will always yield another two *distinct* types. (E.g. Int and Fload yield Maybe Int and Maybe) So, it seems that Functors in Haskell are actually more restrictive than functors can be in general. Is this observation correct or did I misunderstand something?
Thanks!
Dimitri
_______________________________________________ Beginners mailing list Beginners@haskell.org http://www.haskell.org/mailman/listinfo/beginners
_______________________________________________ Beginners mailing list Beginners@haskell.org http://www.haskell.org/mailman/listinfo/beginners
_______________________________________________ Beginners mailing list Beginners@haskell.org http://www.haskell.org/mailman/listinfo/beginners
_______________________________________________ Beginners mailing list Beginners@haskell.org http://www.haskell.org/mailman/listinfo/beginners