[Haskell-cafe] type and data constructors in CT
ben_moseley at mac.com
Sun Feb 1 09:26:15 EST 2009
On 31 Jan 2009, at 20:54, Gregg Reynolds wrote:
> On Sat, Jan 31, 2009 at 1:02 PM, Ben Moseley <ben_moseley at mac.com>
>> You can view a polymorphic unary type constructor of type ":: a ->
>> T" as a
>> polymorphic function.
> Shouldn't that be * :: a -> T a ?
Yes, you're right. And when I say "polymorphic unary type constructor"
I really mean "polymorphic unary /data/ constructor" ...
>> In general, polymorphic functions correspond roughly to natural
>> transformations (in this case from the identity functor to T).
> Are you saying a type constructor is a nat trans and not a functor
Nope ... what I was trying to say is that the data constructor bit is
like a nat trans. (You're right that a unary type constructor often
does correspond to a functor - providing there's a corresponding arrow/
> Seems much more like a plain ol' functor mapping of
> object to object to me - the objects being types. Can you clarify
> what you mean about the correspondence with natural transformations?
So, the idea is that any polymorphic Haskell function (including Data
constructors) can be seen as a natural transformation - so a
"function" from any object (ie type) to an arrow (ie function). So,
take "listToMaybe :: [a] -> Maybe a" ... this can be seen as a natural
transformation from the List functor ( type constructor) to the
Maybe functor (Maybe type constructor) which is a "function" from any
type "a" (eg 'Int') to an arrow (ie Haskell function) eg
"listToMaybe :: [Int] -> Maybe Int".
Hope that makes somewhat more sense.
> I admit I haven't thought through "polymorphic function", mainly
> because there doesn't seem to be any such beast in category theory,
> and to be honest I've always thought the metaphor is misleading.
> After all, a function by definition cannot be polymorphic. It seems
> like fancy name for a syntactic convenience to me - a way to express
> /intensionally/ a set of equations without writing them all out
>> On 31 Jan 2009, at 17:00, Gregg Reynolds wrote:
>>> I think I've finally figured out what a monad is, but there's one
>>> thing I haven't seen addressed in category theory stuff I've found
>>> online. That is the relation between type constructors and data
>>> As I understand it, a type constructor Tcon a is basically the
>>> component of a functor T that maps one Haskell type to another.
>>> Haskell types are construed as the objects of category
>>> I think that's a pretty straightforward interpretation of the CT
>>> definition of functor.
>>> But a data constructor Dcon a is an /element/ mapping taking
>>> (values) of one type to elements of another type. So it too can be
>>> construed as a functor, if each type itself is construed as a
>>> So this gives us two functors, but they operate on different things,
>>> and I don't see how to get from one to the other in CT terms. Or
>>> rather, they're obviously related, but I don't see how to express
>>> relation formally.
>>> If somebody could point me in the right direction I'd be grateful.
>>> Might even write a tutorial. Can't have too many of those.
>>> Haskell-Cafe mailing list
>>> Haskell-Cafe at haskell.org
More information about the Haskell-Cafe