【发布时间】:2018-06-26 23:23:08
【问题描述】:
谁能给我解释一下如何手动推断这个函数f的类型?
f = map (.) . (:) even
我想知道一步一步的解决方案,解释与优先级和东西相关的事情。
提前致谢!
【问题讨论】:
谁能给我解释一下如何手动推断这个函数f的类型?
f = map (.) . (:) even
我想知道一步一步的解决方案,解释与优先级和东西相关的事情。
提前致谢!
【问题讨论】:
步骤 1. 解析:
f = (map (.)) . ((:) even)
步骤 2. 推断一些类型:
(.) :: (b -> c) -> (a -> b) -> (a -> c)
map (.) :: [b -> c] -> [(a -> b) -> (a -> c)]
(:) :: d -> [d] -> [d]
(:) even :: Integral e => [e -> Bool] -> [e -> Bool]
第 3 步。导出一些方程:
x = [e -> Bool] -- the output of (:) even
x = [b -> c] -- the input to map (.)
e = b
c = Bool
第四步,写下f的类型:
f :: [(a -> b) -> (a -> c)]
f :: Integral e => [(a -> e) -> (a -> Bool)]
【讨论】:
.。起作用的规则只是“函数应用程序比任何运算符绑定得更紧密”。