[Haskell-beginners] Are functors in Haskell always injective?

David Thomas davidleothomas at gmail.com
Sat Jul 5 19:21:52 UTC 2014


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 <byorgey at seas.upenn.edu> wrote:
> 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 <defigueiredo at ucdavis.edu> 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 at haskell.org
>> > http://www.haskell.org/mailman/listinfo/beginners
>> >
>> >
>> >
>> > _______________________________________________
>> > Beginners mailing list
>> > Beginners at haskell.org
>> > http://www.haskell.org/mailman/listinfo/beginners
>> >
>> >
>
>> _______________________________________________
>> Beginners mailing list
>> Beginners at haskell.org
>> http://www.haskell.org/mailman/listinfo/beginners
>
> _______________________________________________
> Beginners mailing list
> Beginners at haskell.org
> http://www.haskell.org/mailman/listinfo/beginners


More information about the Beginners mailing list