Vec2正在作为数据声明,但在这种情况下我尝试使用元组废弃我的样板:
{-# LANGUAGE FlexibleInstances #-}
type Vec2 a = (a,a)
class Vector v where
foo :: v Integer
instance Vector Vec2 where
foo = (1,2)
Run Code Online (Sandbox Code Playgroud)
无法部分应用类型同义词.由于它们本质上是类型级函数,因此决定部分应用类型同义词之间的相等性类似于决定扩展等价.
做你喜欢的事情就是你的力量所在
{-# LANGUAGE FlexibleInstances #-}
instance Foo String where
...
Run Code Online (Sandbox Code Playgroud)
自String完全应用.然而,有一种解决方法,因为类型是咖喱的,在某些情况下你可以编写类似的东西
type Arr = ((->) Int)
Run Code Online (Sandbox Code Playgroud)
并为此创建实例,因为类型同义词是"完全应用".
在这种情况下,聪明的eta转换是不可能的,所以你将不得不使用newtype,
newtype SimplePair a = SimplePair {unSimplePair :: (a, a)}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
164 次 |
| 最近记录: |