gpt4 book ai didi

haskell - 为什么多态类型同义词不像实例中的多态数据声明那样工作?

转载 作者:行者123 更新时间:2023-12-04 19:07:23 24 4
gpt4 key购买 nike

Vec2 用作数据声明,但我尝试在这种情况下用元组废弃我的样板:

{-# LANGUAGE FlexibleInstances #-}

type Vec2 a = (a,a)

class Vector v where
foo :: v Integer

instance Vector Vec2 where
foo = (1,2)

最佳答案

不能部分应用类型同义词。因为它们本质上是类型级别的函数,所以决定部分应用的类型同义词之间的相等性类似于决定外延等价性。

你完全有能力做类似的事情

{-# LANGUAGE FlexibleInstances #-}
instance Foo String where
...

由于 String被完全应用。然而,有一个解决方法,因为类型是 curry 的,在某些情况下你可以写像
 type Arr = ((->) Int)

并为此创建实例,因为类型同义词已“完全应用”。

在这种情况下,不可能进行巧妙的 eta 转换,因此您将不得不使用新类型,
newtype SimplePair a = SimplePair {unSimplePair :: (a, a)}

关于haskell - 为什么多态类型同义词不像实例中的多态数据声明那样工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21150206/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com