<< Back to previous view

[ALGOG-2] dispatch for fmap multimethod shouldn't be on type of second argument Created: 22/May/13  Updated: 05/Feb/14  Resolved: 05/Feb/14

Status: Closed
Project: algo.generic
Component/s: None
Affects Version/s: None
Fix Version/s: None

Type: Defect Priority: Minor
Reporter: ben wolfson Assignee: Konrad Hinsen
Resolution: Completed Votes: 0
Labels: None


 Description   

AFAICT having fmap dispatch on the type of the second argument makes it practically impossible to define fmap for arbitrary functions, since the type is different for each function:

user> (type type)
clojure.core$type
user> (type fn?)
clojure.core$fn_QMARK_
user> (type not=)
clojure.core$not_EQ_
user>

However, there's a perfectly reasonable definition of fmap for functions (fmap = comp).

To my mind the simplest/best thing to do is just have a Functor protocol and have fmap call a function in it, with the order of arguments reversed so that dispatch will happen correctly.



 Comments   
Comment by Konrad Hinsen [ 05/Feb/14 10:16 AM ]

I added an fmap implementation for the IFn interface, which covers all functions:
https://github.com/clojure/algo.generic/commit/4dd3e17e494b7b6f43cda045d3162b0f60df7599

Changing fmap to a protocol-based implementation would break all existing code that adds fmap implementations.

Generated at Tue Sep 16 20:32:41 CDT 2014 using JIRA 4.4#649-r158309.