4 ms·
I don't really agree with the example that was chosen. "Functor" is a well defined term with a specific meaning. A much better example would be "Show"(Showable
by wz1000 10y ago
I don't really agree with the example that was chosen. "Functor" is a well defined term with a specific meaning.
A much better example would be "Show"(Showable) vs "Traversable".
- tempodox 10y agoNope. In OCaml, “Functor” is a well-defined term with a completely different meaning. Or go look what “Functor” means in Prolog. Well defined, completely different. If you really want to mess things up, use names that mean something different every day. But I would know what a “Mappable” should be, regardless of PL.
- wz1000 10y agohttps://en.wikipedia.org/wiki/Functor https://en.wikipedia.org/wiki/Functor
- awj 10y ago...you're kind of helping the "don't use Functor" argument here. Most programmers are programmers first and mathematicians second, if at all. Reusing terms from math that have been overloaded in programming domains is definitely going to create a scenario where many (most?) users don't correctly understand the terms you're using.
- wz1000 10y agoA Functor is a fundamental category-theoretical term with a specific definition that simply isn't captured by something vague like "Mappable". Precision is important when talking about such terms. It is not at all clear that (-> a) is "Mappable". Lots of terms like Profunctor, Contravariant Functor, Bifunctor etc. (which are also the names of typecasses in Haskell) rely on the precise, category-theoretical definition of Functor.
- MustardTiger 10y ago>In OCaml, “Functor” is a well-defined term with a completely different meaning No, it has the same meaning. It does not behave identically because the languages do not have identical designs. >But I would know what a “Mappable” should be, regardless of PL. Lots of people wouldn't, and would be wondering what cartography has to do with anything. And even for people familiar with the functional "map", now they would just have an incorrect idea of what Functor is. Lots of Functors are things most people would not think of as being "Mappable".
- more_original 10y ago> >In OCaml, “Functor” is a well-defined term with a completely different meaning > No, it has the same meaning. It does not behave identically because the languages do not have identical designs. Functors in Haskell and OCaml are different things. Haskell Functors correspond to the category-theoretic notion of a functor (a thing mapping objects to objects and morphisms to morphisms in a reasonable manner). In OCaml and ML, Functors represent parameterized modules. These are not known to correspond to category-theoretic functors in any reasonable way (and there have been proposals for category-theoretic models of the ML module system). I guess the term Functor is a bit of a misnomer in the ML-like languages.
- MustardTiger 10y ago>In OCaml and ML, Functors represent parameterized modules No, functors represent functions from a module to a module. Oh hey, that sounds just like the standard definition of a functor. As I said, the behavior is different because the languages are different, but both are named after the category theory functor, because they both emulate it.
- more_original 10y agoPlease read up on the ML module system and its origins. http://cs.stackexchange.com/questions/9769/what-is-the-relation-between-functors-in-sml-and-category-theory http://cs.stackexchange.com/questions/9769/what-is-the-relat... Functors play very different roles in Haskell and OCaml/ML. In Haskell, the Functor class is there to implement the functoriality of a type. If F is a functor, then one implements maps of type F A -> F B from given A -> B in a functorial way. In ML, the term functor was chosen because they are not first-class functions, but "a level up" (much like a functor is a level up from the maps in the category that it operates on). However, if F is an ML functor, then there are no "maps" between the modules F(A) and F(B). The morphism part, which is the essence of a Functor in Haskell, is missing in ML. This is why I think that the functor terminology isn't very good in ML. Not everything that maps one thing to another is a functor.