我有以下类型定义:
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/