当前位置:  开发笔记 > 小程序 > 正文

Either和Either Int有什么区别?什么是A?多态类型构造函数?它的目的是什么?

如何解决《Either和EitherInt有什么区别?什么是A?多态类型构造函数?它的目的是什么?》经验,为你挑选了1个好方法。

简介:

我明白之间的差别Maybe aMaybe Int,我也明白之间的差别Either a bEither Int Int.我也明白,它Either Int是同一种动物Maybe,它们都将一个类型作为参数并生成一个新类型,即它们都是类型构造函数,它们将单个类型作为参数(具体如Int或具体不具体a)和生产具体类型或多态类型.

现在我不明白的是什么样的结构Either a?它不是Maybe因为如果我们Int向它提供具体类型(如),它永远不会产生具体的(读取非多态)类型.那么在这种情况下调用Either a多态类型构造函数并调用Maybe具体类型构造函数是正确的吗?(这就是我如何称呼它们,它们在Haskell命名法中的正式名称是什么?)

此外,我不知道类型构造函数的Haskell类型系统中的官方分类是什么样的,Either a因为它不能与Maybe因为 - 如前一段中所提到的 - 在同一类别中- 无论我们应用什么类型Either a的结果type永远不会是具体类型,例如,它总是一个多态类型Either a Int.

我问这个的原因是因为Either aFunctor.这开始变得令人困惑.没有像我以前见过的任何东西.我不知道我应该如何从概念上解释Either a(多态类型构造函数)是一个实例Functor?同样地,(->) r(也是同一种动物Either a)也是Functor如此.

问题:

什么是Either a(->) r

他们正式称什么?

它们如何在概念上适合Haskell的类型系统?

这些多态类型构造函数在哪里更详细地描述/讨论?

我读到了什么,以便更好地了解它们?

我应该读一下种类吗?是种对理解这样的多晶型构造的秘密方式Either a(->) r

Either a Int同一种动物[a]吗?

是唯一的目的Either a Int在的情况下申报的多态的输入和输出类型的功能,就像[a]fmap :: (a -> b) -> [a] -> [b]

最重要的问题:

我应该如何根据上述想法解释以下代码?

instance Functor (Either a) where 
  fmap f (Right x) = Right (f x) 
  fmap f (Left x) = Left x

class Functor f where 
  fmap :: (a -> b) -> f a -> f b

那么结果fmap函数(其类型是fmap :: (a -> b) -> Either c a -> Either c b)将是多态的c

这是制作Either a实例的唯一效果Functor吗?那么结果fmap函数会是多态的c吗?

与之相比,例如,制作Either Int一个实例Functor

那么结果fmap只能在Either Int a类型上起作用,但在所有Either a b类型上都不能正常/多态地工作?

如果我理解正确,这是多态类型构造函数的唯一要点和目的Either a吗?这fmap适用于所有Either a b类型?

我很困惑,我不确定我Either a是否正确解释.有人可以确认1)我的解释是正确的2)如果没有那么请赐教.

谢谢阅读.



1> leftaroundab..:

实际上并没有这样的事情Either a.与多态函数一样,多态实例应该通过通用量化来读取系统-F样式:

forall a . instance Functor (Either a) where ...

仿函数实例本身是一个字典,即类型级函数

functor = ?f -> { ?a b -> (a->b) -> f a->f b }

所以这两种情况都是这样的

eitherFunctor = ?a -> functor (Either a)

或者,您可以将其视为编译器替换instance Functor (Either a)为大量离散实例

instance Functor (Either ()) where ...
instance Functor (Either Int) where ...
...
instance Functor (Either (Either Int String)) where ...
...

从字面上看,显然不可能这样做.


@Sibi,大lambda是来自System F的符号,它意味着对类型的抽象,就像小lambda是对值的抽象.
@jhegedus,System F不是一种风格,它是Haskell类型系统所基于的数学理论(类型化lambda演算的扩展).见这里:http://en.wikipedia.org/wiki/System_F
推荐阅读
k78283381
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有