所以我今天在玩 Haskell,考虑给定类型自动生成函数定义。
例如,函数的定义
twoply :: (a -> b, a -> c) -> a -> (b, c)
考虑到类型,对我来说这是显而易见的(如果我排除使用undefined :: a
).
所以我想出了以下几点:
¢ :: a -> (a ->b) -> b
¢ = flip ($)
其中有一个有趣的属性
(¢) ¢ ($) :: a -> (a -> b) -> b
这让我想到了我的问题。给定关系=::=
对于“具有相同的类型”,该语句是否x =::= x x ($)
唯一定义类型x
? Must x =::= ¢
,或者是否存在另一种可能的类型x
?
我尝试从x =::= x x ($)
推论x :: a -> (a -> b) -> b
,却陷入了困境。
x =::= x x ($)
也适用于x = const
,其类型为a -> b -> a
。所以它不能唯一地标识类型。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)