为什么即使我不应用 f 参数,我也需要在 fmap 的定义中再次调用构造函数?

壁虎

我不知道为什么fmap _ a = a下面是非法的。这是代码:

data Sum a b = First a | Second b

instance Functor (Sum a) where
  fmap f (Second b) = Second (f b)
  fmap _ (First a)  = First a
  fmap _ a          = a  -- Why can't I do this instead?

另一个问题是,这是否会影响性能,还是仅在编译时才会发生?

威尔·尼斯

你需要调用构造函数重新创建一个新的价值,所以它也会有不同的类型比你开始与一个。

fmap ::   (b -> c) ->    Sum a b  -> Sum a c
fmap (f :: b -> c) ::    Sum a b  -> Sum a c
fmap (f :: b -> c) (x :: Sum a b) -> Sum a c

                 a ::     a               a ::     a
           First a :: Sum a b       First a :: Sum a c

                 b ::       b             c ::       c
          Second b :: Sum a b      Second c :: Sum a c

a :: aFirst a具有类型Sum a tt通过其中的上下文确定First a出现。两个First a等号的两侧定义两个不同的值,每个它自己的类型。使用a右侧的变量,它仍然引用Sum a b与左侧相同的类型值但是我们需要一个不同的类型,根据fmap.

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

f在函子的fmap函数中代表什么?

来自分类Dev

为什么需要`fmap` 在`Maybe Integer` 上调用`succ`?

来自分类Dev

为什么我们需要在MSIL中显式调用父构造函数?

来自分类Dev

PowerShell > 为什么我需要在函数返回值之前在函数中内联声明函数参数?

来自分类Dev

为什么我需要在这个字典初始值设定项中的括号,在 F# 中

来自分类Dev

为什么需要在构造函数中调用超类?

来自分类Dev

为什么我们需要在 python 中的 f 字符串周围放置撇号?

来自分类Dev

graphql 为什么我需要在解析器参数中声明一个额外的参数

来自分类Dev

为什么我们需要在 C++20 中的函数概念参数之后使用 auto?

来自分类Dev

为什么即使我使用JDBC驱动程序4.0,也需要在Tomcat Web应用程序中调用Class.forName?

来自分类Dev

为什么我需要在我的独立应用程序中添加脚本引擎

来自分类Java

我真的需要在Java中定义默认构造函数吗?

来自分类Dev

为什么我们需要在实体中声明非空构造函数?

来自分类Dev

为什么我们需要在函数中的第二个参数之后初始化参数参数?

来自分类Dev

为什么我们需要在优先级队列声明中添加一个向量作为参数?

来自分类Dev

为什么我需要在 C 中用 * 定义对指针的引用?

来自分类Dev

我需要在Reactjs的此函数调用中传递ID

来自分类Dev

为什么我需要在Kotlin中在=之前添加空间?

来自分类Dev

Postgres:为什么我需要在 max() 中引用列名?

来自分类Dev

为什么我需要在Promise .then()中关闭?

来自分类Dev

为什么我需要在Elasticsearch中缩小索引

来自分类Dev

为什么我需要在循环条件中包含 EOF?

来自分类Dev

为什么我需要在Firebase中退订`onAuthStateChanged`

来自分类Dev

使用ScopedTypeVariables约束fmap函数参数

来自分类Dev

为什么我们需要在Android应用中存储Goefence数据?

来自分类Dev

为什么需要在我们的应用程序中刷新数据库视图?

来自分类Dev

我们什么时候需要在信号处理程序中再次建立信号函数?

来自分类Dev

我是否需要在C#中释放对参数的记忆

来自分类Dev

为什么需要在JavaScript中将构造函数分配回我的自定义错误类型

Related 相关文章

  1. 1

    f在函子的fmap函数中代表什么?

  2. 2

    为什么需要`fmap` 在`Maybe Integer` 上调用`succ`?

  3. 3

    为什么我们需要在MSIL中显式调用父构造函数?

  4. 4

    PowerShell > 为什么我需要在函数返回值之前在函数中内联声明函数参数?

  5. 5

    为什么我需要在这个字典初始值设定项中的括号,在 F# 中

  6. 6

    为什么需要在构造函数中调用超类?

  7. 7

    为什么我们需要在 python 中的 f 字符串周围放置撇号?

  8. 8

    graphql 为什么我需要在解析器参数中声明一个额外的参数

  9. 9

    为什么我们需要在 C++20 中的函数概念参数之后使用 auto?

  10. 10

    为什么即使我使用JDBC驱动程序4.0,也需要在Tomcat Web应用程序中调用Class.forName?

  11. 11

    为什么我需要在我的独立应用程序中添加脚本引擎

  12. 12

    我真的需要在Java中定义默认构造函数吗?

  13. 13

    为什么我们需要在实体中声明非空构造函数?

  14. 14

    为什么我们需要在函数中的第二个参数之后初始化参数参数?

  15. 15

    为什么我们需要在优先级队列声明中添加一个向量作为参数?

  16. 16

    为什么我需要在 C 中用 * 定义对指针的引用?

  17. 17

    我需要在Reactjs的此函数调用中传递ID

  18. 18

    为什么我需要在Kotlin中在=之前添加空间?

  19. 19

    Postgres:为什么我需要在 max() 中引用列名?

  20. 20

    为什么我需要在Promise .then()中关闭?

  21. 21

    为什么我需要在Elasticsearch中缩小索引

  22. 22

    为什么我需要在循环条件中包含 EOF?

  23. 23

    为什么我需要在Firebase中退订`onAuthStateChanged`

  24. 24

    使用ScopedTypeVariables约束fmap函数参数

  25. 25

    为什么我们需要在Android应用中存储Goefence数据?

  26. 26

    为什么需要在我们的应用程序中刷新数据库视图?

  27. 27

    我们什么时候需要在信号处理程序中再次建立信号函数?

  28. 28

    我是否需要在C#中释放对参数的记忆

  29. 29

    为什么需要在JavaScript中将构造函数分配回我的自定义错误类型

热门标签

归档