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]

...它是告诉您数字列表中是否包含list的功能[1..10]也就是说,就像在的其他任何用法中一样elem,它告诉您某些列表是否包含元素。该元素本身本身就是列表的事实是无关紧要的。

另一方面map [1..10],这是错误的,因为to的第一个参数map必须是一个function并且列表虽然可以是列表元素,但绝对不能成为功能

与运算符部分(`elem`[1..10])截然不同(`map`[1..10])在这些示例中,[1..10]实际上是第二个参数。本节省略了left / first参数。所以在这种情况下,我们所说的就像

Prelude> 3 `elem` [1..10]
True
Prelude> 19 `elem` [1..10]
False

...这也适用于

Prelude> negate `map` [1..10]
[-1,-2,-3,-4,-5,-6,-7,-8,-9,-10]

尽管那通常是书面的map negate [1..10]negate<$>[1..10]


从某种意义上说,列表既可以古怪的,也可以无政府的:实际上,列表可以是函数:使用-XOverloadedLists扩展名,您可以编写一个类实例,以允许您使用列表语法定义函数。我看不出这可能有什么意义,但是了解这种理论上的可能性也许很好。特别是,启用该扩展后,确实会map [1..10]令人困惑地进行编译,并且您只会得到一个令人困惑的错误,其中涉及...在其他地方乱码。Could not deduceThe type variable ‘a0’ is ambiguous

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

$ .fancybox(elem)有效但是$(elem).fancybox()无效

来自分类Dev

警告:call_user_func_array()期望参数1为有效的回调mysqli

来自分类Dev

WordPress调试-call_user_func_array()期望参数1为有效的回调

来自分类Dev

new _Elem[_Size]() 与 new _Elem[_Size]{} 之间有什么不同?

来自分类Dev

无法理解如何编码Func <Func <T1,T2>,T3>

来自分类Dev

无法从 `Expression<Func<T1, T2>>` 转换为 `Expression<Func<object, object>>`

来自分类Dev

来自模型的错误-call_user_func_array()期望参数1为有效的回调

来自分类Dev

有没有办法将Func <T1,bool>映射到Func <T2,bool>?

来自分类Dev

v.Type()。Elem()和v.Elem()。Type()有什么区别?

来自分类Dev

Wordpress警告:call_user_func_array()期望参数1为有效回调,数组必须恰好具有两个成员

来自分类Dev

PHP 警告:call_user_func_array() 期望参数 1 为有效回调,找不到函数“remove_wpcf7”或无效的函数名称

来自分类Dev

出现elem时自动对焦无法正常工作

来自分类Dev

mongodb $ elem匹配查询返回所有子文档

来自分类Dev

在没有 JSX 的 React 中设置 elem id

来自分类Dev

我无法通过func <T1,T2>获得C#方法名称

来自分类Dev

无法弄清楚如何使用 Func<TResult>' 解决需要 1 个类型参数

来自分类Dev

调用Func <T1,T2,T3>有哪些可选参数?

来自分类Dev

为什么`+ 1`在Java中有效表达?

来自分类Dev

当func1保持运行并返回时,如何在func1内部调用func2?

来自分类Dev

将Expression <Func <T1 >>转换为Expression <Func <T1,T2 >>

来自分类Dev

obj.apply {func1()}的结果与obj.func1()不同

来自分类Dev

如何将委托`Func<T1, Func<T2, Task<TResult>>>` 转换为`Func<T1, Task<Func<T2, TResult>>`?

来自分类Dev

为什么此json4s代码在scala repl中有效,但无法编译?

来自分类Dev

Qt Creator Debug 有效但无法编译发布

来自分类Dev

TkInter中的“ func”和“ func()”有什么区别?

来自分类Dev

没有注册Func的C#DI Func工厂?

来自分类Dev

TkInter中的“ func”和“ func()”有什么区别?

来自分类Dev

带有参数的通用Func

来自分类Dev

查找所有Func代表

Related 相关文章

  1. 1

    $ .fancybox(elem)有效但是$(elem).fancybox()无效

  2. 2

    警告:call_user_func_array()期望参数1为有效的回调mysqli

  3. 3

    WordPress调试-call_user_func_array()期望参数1为有效的回调

  4. 4

    new _Elem[_Size]() 与 new _Elem[_Size]{} 之间有什么不同?

  5. 5

    无法理解如何编码Func <Func <T1,T2>,T3>

  6. 6

    无法从 `Expression<Func<T1, T2>>` 转换为 `Expression<Func<object, object>>`

  7. 7

    来自模型的错误-call_user_func_array()期望参数1为有效的回调

  8. 8

    有没有办法将Func <T1,bool>映射到Func <T2,bool>?

  9. 9

    v.Type()。Elem()和v.Elem()。Type()有什么区别?

  10. 10

    Wordpress警告:call_user_func_array()期望参数1为有效回调,数组必须恰好具有两个成员

  11. 11

    PHP 警告:call_user_func_array() 期望参数 1 为有效回调,找不到函数“remove_wpcf7”或无效的函数名称

  12. 12

    出现elem时自动对焦无法正常工作

  13. 13

    mongodb $ elem匹配查询返回所有子文档

  14. 14

    在没有 JSX 的 React 中设置 elem id

  15. 15

    我无法通过func <T1,T2>获得C#方法名称

  16. 16

    无法弄清楚如何使用 Func<TResult>' 解决需要 1 个类型参数

  17. 17

    调用Func <T1,T2,T3>有哪些可选参数?

  18. 18

    为什么`+ 1`在Java中有效表达?

  19. 19

    当func1保持运行并返回时,如何在func1内部调用func2?

  20. 20

    将Expression <Func <T1 >>转换为Expression <Func <T1,T2 >>

  21. 21

    obj.apply {func1()}的结果与obj.func1()不同

  22. 22

    如何将委托`Func<T1, Func<T2, Task<TResult>>>` 转换为`Func<T1, Task<Func<T2, TResult>>`?

  23. 23

    为什么此json4s代码在scala repl中有效,但无法编译?

  24. 24

    Qt Creator Debug 有效但无法编译发布

  25. 25

    TkInter中的“ func”和“ func()”有什么区别?

  26. 26

    没有注册Func的C#DI Func工厂?

  27. 27

    TkInter中的“ func”和“ func()”有什么区别?

  28. 28

    带有参数的通用Func

  29. 29

    查找所有Func代表

热门标签

归档