Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Categorical structure in Haskell

Hask is usually thought to be the category whose objects are types and morphisms are functions. However, I've seen Conor McBride (@pigworker) warn against the use of Hask multiple times (1, 2, 3):

  • I would discourage talk of "the Hask Category" because it subconsciously conditions you against looking for other categorical structure in Haskell programming.

  • Note, I dislike the use of "Hask" as the name of the "category of Haskell types and functions": I fear that labelling one category as the Haskell category has the unfortunate side-effect of blinding us to the wealth of other categorical structure in Haskell programming. It's a trap.

  • I wish people wouldn't call it "Hask", though: it threatens to limit the imagination.

What other categories can we see in Haskell?

In one of his answers, he touches upon some of these ideas, but I wonder if someone could expand upon it; and I wonder if there are even more examples.

[...] there's a ton of categorical structure lurking everywhere, there's certainly a ton of categorical structure available (possibly but not necessarily) at higher kinds. I'm particularly fond of functors between indexed families of sets.

like image 514
Dan Oneață Avatar asked Jun 07 '18 07:06

Dan Oneață


1 Answers

Constraints in Haskell also form a category. The objects are the constraints, and the arrows mean "this constraint implies this other constraint". So every constraint implies itself, and there's an arrow between Monad f and Applicative f, between Ord a and Eq a and between Ord a and Ord [a].

It is a thin category, so there is at most one arrow between two objects.

like image 157
danidiaz Avatar answered Oct 21 '22 22:10

danidiaz