首页 > 解决方案 > Haskell 类型类实例语法

问题描述

假设我有一个MayFail定义如下的数据类型

data MayFail e a = Error e | Result a
    deriving (Show)

所以要么是结果,要么是错误。我现在想Functor为它写一个,但这就是它令人困惑的地方。

MayFail有两种类型,要么e要么a。那么为什么我要写仿函数如下

instance Functor (MayFail e) where
  fmap _ (Error e)  = Error e
  fmap f (Result x) = Result (f x)

而不是instance Functor (MayFail e a) where

这背后的句法规则是什么?

标签: haskell

解决方案


你的问题有点不清楚,但我假设你在问为什么你必须使用eininstance Functor (MayFail e)而不仅仅是写instance Functor MayFail.

这是因为Functor接受了 kind 的类型参数Type -> Type,并且MayFail它本身就有 kind Type -> Type -> Type。(使用MayFail e a也是错误的,因为它的种类只是Type.)


推荐阅读