我有这个 Rank 3 Type 函数定义:
f3 :: ((forall a. a -> a) -> Int) -> Bool -> Bool
f3 .... = ?
我正在努力为它写一个简单的例子。你能帮我吗?
我有这个 Rank 3 Type 函数定义:
f3 :: ((forall a. a -> a) -> Int) -> Bool -> Bool
f3 .... = ?
我正在努力为它写一个简单的例子。你能帮我吗?
f3 :: ((forall a. a -> a) -> Int) -> Bool -> Bool
f3 f b = (f id == 3) && b
f3_ex :: Bool
f3_ex = f3 f True where
f :: (forall a. a -> a) -> Int
f g = g 3
如评论中所述,将类型更改为更有趣:
f4 :: ((forall a. a -> a -> a) -> Int) -> Bool -> Bool
f4 f b = (f const == 3) && b
f4_ex :: Bool
f4_ex = f4 f True where
f :: (forall a. a -> a -> a) -> Int
f g = g 3 5
f5 :: ((forall a. a -> a -> a) -> Int) -> Bool -> Bool
f5 f b = f (if b then const else const id) == 42
f5_ex :: Bool
f5_ex = f5 f True where
f :: (forall a. a -> a -> a) -> Int
f g = g 3 5 + 39
这里f
本质上是类型(Int, Int)
,第一个组件由 给出,f const
另一个由 给出f (const id)
或等价f (flip const)
。