作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有以下类型定义:
newtype Flip f a b =
Flip (f b a) deriving (Eq, Show)
Flip
数据构造函数是否有一个或三个参数?
data K a b = K a
newtype Flip f a b =
Flip (f b a) deriving (Eq, Show)
instance Functor (Flip K a) where
fmap f (Flip (K b)) = Flip (K (f b))
(Flip K a)
的类型是什么?
最佳答案
Flip
数据构造函数有 一个参数 。该参数的类型为 f b a
。
因此,这意味着 f
本身是一个类型为 f :: * -> * -> *
的高阶类型参数。更严格的 newtype
语句是:
newtype Flip (f :: * -> * -> *) a b = Flip (f b a)
Flip Either Int Bool
,因为
Either
是一种需要两个额外类型参数的类型,然后构造一个
Flip (Right 1) :: Flip Either Int Bool
。
What is the type of
(Flip K a)
?
Flip K a
不是完全应用的类型。在伪代码中,它的类型为
b -> Flip K a b
。一旦
b
被解析(
Functor
适用于高阶类型),我们知道
Flip
的唯一参数将有一个
K b
构造函数。因此,例如
Flip (K 1)
是
Flip K a Int
类型。
关于haskell - Flip 数据类型的仿函数类型变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44908073/
我是一名优秀的程序员,十分优秀!