func = elem [1..10]在GHCi中有效,但无法编译
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了func = elem [1..10]在GHCi中有效,但无法编译相关的知识,希望对你有一定的参考价值。
在运行该命令的GHCI中
func = elem [1..10]
效果很好,还给了我部分功能。我很好奇它为什么起作用?当我尝试编译此代码时,它给了我一个错误。例如,这不适用于其他功能。 Map在GHCi中以及编译时给我一个错误。
func = map [1..10]
好奇GHCi和功能元素有什么特别之处。
我知道我可以这样写:
func = (`elem` [1..10])
func = (`map` [1..10])
而且有效,但是为什么其他方式对elem有效。
答案
elem [1..10]
是一个完全明智的术语。示例:
Prelude> elem [1..10] [[0..9], [1..10]]
True
Prelude> elem [1..10] [[0..8], [1..7]]
False
也许更常见的是,这会写成
Prelude> [1..10] `elem` [[0..9], [1..10]]
True
Prelude> [1..10] `elem` [[0..8], [1..7]]
False
但是那只是同一件事的不同语法版本。
这也意味着它[[可以被编译,您只需要给它一个适当的签名(或者让GHC为您推断一个)”即可。例如,
f :: [[Int]] -> Bool
f = elem [1..10]
...它是告诉您数字列表的列表是否包含列表。并且列表虽然可以是列表元素,但是绝对不能成为函数。[1..10]
的功能。即就像在elem
的任何其他用法中一样,它告诉您某些列表是否包含元素。该元素本身本身就是列表的事实是无关紧要的。另一方面,
map [1..10]
只是错误的,因为map
的第一个参数必须为function
以上是关于func = elem [1..10]在GHCi中有效,但无法编译的主要内容,如果未能解决你的问题,请参考以下文章
Yesod:在 ghci 中运行“runDB”函数时键入实例错误
在 GHCi 中,为啥函数箭头 `:kind (->)` 的种类包含问号 `(->) :: ?? ->? -> *`? [复制]