我被问及这三种Haskell类型表达式是否等价:
τ1 = (a -> a) -> (a -> a -> a)
τ2 = a -> a -> ((a -> a) -> a)
τ3 = a -> a -> (a -> (a -> a))
如果我去掉括号,剩下的就是这样。
τ1 = (a -> a) -> a -> a -> a
τ2 = a -> a -> (a -> a) -> a
τ3 = a -> a -> a -> a -> a
显然,它们都彼此不同。但是根据问题,这两个答案是错误的:
τ1 !≡ τ2 !≡ τ3 !≡ τ1
τ1 !≡ τ2 ≡ τ3
我有些困惑,什么是正确答案,为什么?