所以我今天在玩 Haskell,考虑给定类型的函数定义的自动生成。
例如函数的定义
twoply :: (a -> b, a -> c) -> a -> (b, c)
鉴于类型(如果我排除使用
undefined :: a
),这对我来说是显而易见的。然后我想出了以下内容:
¢ :: a -> (a ->b) -> b
¢ = flip ($)
它有一个有趣的特性
(¢) ¢ ($) :: a -> (a -> b) -> b
这让我想到了我的问题。给定关系
=::=
对于“具有相同的类型”,语句 x =::= x x ($)
唯一定义 x
的类型?必须x =::= ¢
,或者 x
是否存在另一种可能的类型?我试图从
x =::= x x ($)
向后工作推论x :: a -> (a -> b) -> b
,却陷入了困境。
最佳答案
x =::= x x ($)
也适用于 x = const
,其类型为 a -> b -> a
.所以它不唯一标识类型。
关于Haskell:从类型推导出函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3731501/