我试图使Vector.Generic.Vector成为其他类型类的实例(在我的情况下 - Functor).
我可以满足于向Vector.Unboxed.Vector添加一个Functor实例,但我无法弄清楚它的语法.我最好的尝试是尝试类似的东西:
instance (U.Unbox a, U.Unbox b) => Functor U.Vector where
fmap = U.map
Run Code Online (Sandbox Code Playgroud)
但编译器(恰当地)抱怨'a'和'b'在'=>之后无处可去.我是否可以为Functor定义这个定义,因为它假设对fmap允许的类型有更多限制?
我在SO中发现的大多数东西都太先进了,所以请温柔:-)
想想的类型fmap
:
fmap :: Functor f => (a -> b) -> f a -> f b
Run Code Online (Sandbox Code Playgroud)
您正在尝试添加约束,a
并且b
它们都是实例Unbox
.这是不可行的,因为fmap
完全是通用的,而未装箱的地图Vector
特定于实例Unbox
.
它不能成为一个Functor
.