haskell - Flip 数据类型的仿函数类型变量

标签 haskell arguments functor newtype

我有以下类型定义:

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/

相关文章:

haskell - 类型级列表的行多态相等性

haskell - 如何在 doctest 中使用带有 QuickCheck 的多行输入?

c++将函数作为参数传递给另一个带有void指针的函数

ruby - 给定一个参数数组,我如何将这些参数发送到 Ruby 中的特定函数?

javascript - 函数变量签名/参数

C++ 摆脱单例 : alternative to functors and static methods

haskell - 创建相同类型类但不同类型的值列表

haskell - 将 Haskell 程序作为 C 源代码分发

haskell - fmap 如何与数据构造函数一起使用?

haskell - fmap和bind的关系