s_q*_*w23 3 haskell types functional-programming unify
关于我的考试,我有点不满意.我想通过手工应用统一算法找出这两个函数的类型:
map map
(\x -> x >>= (\y -> y))
Run Code Online (Sandbox Code Playgroud)
有人能指出我正确的方向吗?直到现在我唯一能找到的资源是维基百科条目,由于抽象程度很高,它并没有真正帮助我.
问候,谢谢.
我们先做第一个.
map :: (a -> b) -> [a] -> [b]
Run Code Online (Sandbox Code Playgroud)
现在我们可以用两个不同的名称再次编写它,为清楚起见:
map :: (c -> d) -> [c] -> [d]
Run Code Online (Sandbox Code Playgroud)
现在我们将第二个替换为第一个参数,得到:
(a -> b) === (c -> d) -> ([c] -> [d]) (recall the associativity of (->))
a === (c -> d)
b === ([c] -> [d])
Run Code Online (Sandbox Code Playgroud)
现在我们将这些类型分配替换为第一个签名的剩余部分,获取
map map :: [c -> d] -> [[c] -> [d]]
Run Code Online (Sandbox Code Playgroud)
明确?