Vec2正在作为数据声明工作,但在这种情况下我尝试使用元组废弃我的样板:
{-# LANGUAGE FlexibleInstances #-}
type Vec2 a = (a,a)
class Vector v where
foo :: v Integer
instance Vector Vec2 where
foo = (1,2)
答案 0 :(得分:5)
无法部分应用类型同义词。由于它们本质上是类型级函数,因此决定部分应用的类型同义词之间的相等性类似于决定扩展等价。
你很有能力做一些像
这样的事情{-# LANGUAGE FlexibleInstances #-}
instance Foo String where
...
自String
完全应用以来。然而,有一种解决方法,因为类型是curry,在某些情况下你可以编写像
type Arr = ((->) Int)
并为此创建实例,因为类型同义词是“完全应用”。
在这种情况下,无法实现聪明的eta转换,因此您将不得不使用新类型,
newtype SimplePair a = SimplePair {unSimplePair :: (a, a)}