Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
此函数的Haskell手动类型推断_Haskell_Type Inference - Fatal编程技术网

此函数的Haskell手动类型推断

此函数的Haskell手动类型推断,haskell,type-inference,Haskell,Type Inference,有人能给我解释一下如何手动推断这个函数f的类型吗 我想知道一个循序渐进的解决方案,解释与优先级相关的事情 提前谢谢 第1步。解析: f = (map (.)) . ((:) even) 第二步。推断出一些类型: (.) :: (b -> c) -> (a -> b) -> (a -> c) map (.) :: [b -> c] -> [(a -> b) -> (a -> c)] (:) :: d -> [d] -> [d

有人能给我解释一下如何手动推断这个函数f的类型吗

我想知道一个循序渐进的解决方案,解释与优先级相关的事情

提前谢谢

第1步。解析:

f = (map (.)) . ((:) even)
第二步。推断出一些类型:

(.) :: (b -> c) -> (a -> b) -> (a -> c)
map (.) :: [b -> c] -> [(a -> b) -> (a -> c)]
(:) :: d -> [d] -> [d]
(:) even :: Integral e => [e -> Bool] -> [e -> Bool]
第三步。推导出一些方程式:

x = [e -> Bool] -- the output of (:) even
x = [b -> c] -- the input to map (.)
e = b
c = Bool
第四步。写下f的类型:


非常感谢@DanRobertson有一件事,哪一个是用于以这种方式解析表达式的标准?每个运算符都有一个定义的优先级和关联性。@DanRobertson运算符优先级和关联性在这里都不重要,因为只有一个运算符。。规则是,应用程序的函数绑定比任何操作符都要紧密。
x = [e -> Bool] -- the output of (:) even
x = [b -> c] -- the input to map (.)
e = b
c = Bool
f :: [(a -> b) -> (a -> c)]
f :: Integral e => [(a -> e) -> (a -> Bool)]