为什么在 Haskell 中 flip 和 flip(:) 是不同的函数?

袁彬杰
Prelude> :t flip
flip :: (a -> b -> c) -> b -> a -> c
Prelude> :t flip(:)
flip(:) :: [a] -> a -> [a]

我不认为(:)是一个特殊的语法糖flip那么它做了flip什么?

威廉·范·翁塞姆

“成分”是:

flip :: (a -> (b -> c)) -> (b -> (a -> c))
(:) :: d -> ([d] -> [d])

所以这里flip可以采用一个函数( type a -> b -> c),它基本上将它转换为 type 的函数b -> a -> c,因此“参数”(从技术上讲,在 Haskell 中,函数只有一个参数)被“翻转”。

如果你写flip (:),你就翻转了(:)函数。由于该(:)函数具有类型d -> [d] -> [d],因此结果为[d] -> d -> [d]

然而,我们可以执行更严格的类型推断。既然(:)是一个功能应用的参数flip,我们知道的类型(:)应该是相同的类型参数flip,所以:

   a -> ( b  -> c  )
~  d -> ([d] -> [d])
-----------------------
a ~ d, b ~ [d], c ~ [d]

所以我们得出结论a ~ dad是相同的类型),b ~ c ~ [d]因此,这意味着类型flip (:)是:

flip (:) :: b -> a -> c

或者当我们对更具体的类型执行替换时:

flip (:) :: [d] -> d -> [d]

在语义上flip (:)接受一个 listxs和一个 element x,并返回一个列表,其中元素被添加到给定的列表(so (x:xs))。

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

JavaScript中的`flip`函数实现?

来自分类Dev

Flip the matrix

来自分类Dev

为什么Haskell在Data.List中的`transpose`函数不使用`head`和`tail`?

来自分类Dev

带有coord_flip的ggplot2中errobar的自由缩放和位置

来自分类Dev

在ggplot2中,coord_flip和自由缩放不一起使用

来自分类Dev

TypeError:game_1.flip不是函数

来自分类Dev

Firefox中的CSS Flip动画问题

来自分类Dev

haskell中的箭头和函数有何不同?

来自分类Dev

haskell中的箭头和函数有何不同?

来自分类Dev

如何在嵌入ggplot图的函数中添加coord_flip参数

来自分类Dev

为什么braced-init-list在函数调用和构造函数调用中的行为不同?

来自分类Dev

为什么srandom(time(NULL))在main()函数和用户定义函数中的行为不同?

来自分类Dev

为什么此Haskell函数的返回与定义的函数的返回不同?

来自分类Dev

为什么“:type null”在Frege中与Haskell不同?

来自分类Dev

如何在ggplot2中一起使用coord_carteisan和coord_flip

来自分类Dev

在ggplot2中的coord_flip()之后手动设置X轴上的限制和刻度

来自分类Dev

JS — FLIP 技术和 requestAnimationFrame,重构为不可嵌套

来自分类Dev

为什么在Haskell中不带参数定义函数

来自分类Dev

为什么此数学函数在Java和JavaScript中返回不同的值?

来自分类Dev

为什么statsmodels的关联和自相关函数在Python中给出不同的结果?

来自分类Dev

为什么std :: atomic构造函数在C ++ 14和C ++ 17中表现不同

来自分类Dev

为什么拒绝和抛出与Promise.all中的异步函数不同?

来自分类Dev

Java SocketChannel:为什么wrap-flip-write不起作用,而wrap-write起作用?

来自分类Dev

为什么我的CSS Flip-Card背面输入越来越关注点击?

来自分类Dev

为什么类型推断算法由于“ Fun.flip Option.bind”而混淆?

来自分类Dev

Java SocketChannel:为什么wrap-flip-write不起作用,而wrap-write起作用?

来自分类Dev

为什么SDL_Flip不限制FPS以匹配屏幕频率?

来自分类Dev

这个基于折叠的函数如何工作:“ myreverse =折叠(flip(:))[]”?

来自分类Dev

R中coord_flip之后的颠倒顺序

Related 相关文章

  1. 1

    JavaScript中的`flip`函数实现?

  2. 2

    Flip the matrix

  3. 3

    为什么Haskell在Data.List中的`transpose`函数不使用`head`和`tail`?

  4. 4

    带有coord_flip的ggplot2中errobar的自由缩放和位置

  5. 5

    在ggplot2中,coord_flip和自由缩放不一起使用

  6. 6

    TypeError:game_1.flip不是函数

  7. 7

    Firefox中的CSS Flip动画问题

  8. 8

    haskell中的箭头和函数有何不同?

  9. 9

    haskell中的箭头和函数有何不同?

  10. 10

    如何在嵌入ggplot图的函数中添加coord_flip参数

  11. 11

    为什么braced-init-list在函数调用和构造函数调用中的行为不同?

  12. 12

    为什么srandom(time(NULL))在main()函数和用户定义函数中的行为不同?

  13. 13

    为什么此Haskell函数的返回与定义的函数的返回不同?

  14. 14

    为什么“:type null”在Frege中与Haskell不同?

  15. 15

    如何在ggplot2中一起使用coord_carteisan和coord_flip

  16. 16

    在ggplot2中的coord_flip()之后手动设置X轴上的限制和刻度

  17. 17

    JS — FLIP 技术和 requestAnimationFrame,重构为不可嵌套

  18. 18

    为什么在Haskell中不带参数定义函数

  19. 19

    为什么此数学函数在Java和JavaScript中返回不同的值?

  20. 20

    为什么statsmodels的关联和自相关函数在Python中给出不同的结果?

  21. 21

    为什么std :: atomic构造函数在C ++ 14和C ++ 17中表现不同

  22. 22

    为什么拒绝和抛出与Promise.all中的异步函数不同?

  23. 23

    Java SocketChannel:为什么wrap-flip-write不起作用,而wrap-write起作用?

  24. 24

    为什么我的CSS Flip-Card背面输入越来越关注点击?

  25. 25

    为什么类型推断算法由于“ Fun.flip Option.bind”而混淆?

  26. 26

    Java SocketChannel:为什么wrap-flip-write不起作用,而wrap-write起作用?

  27. 27

    为什么SDL_Flip不限制FPS以匹配屏幕频率?

  28. 28

    这个基于折叠的函数如何工作:“ myreverse =折叠(flip(:))[]”?

  29. 29

    R中coord_flip之后的颠倒顺序

热门标签

归档