我经常遇到这种情况,因为它很烦人.
假设我有一个总和类型,它可以包含一个x或一堆其他与之无关的事物x-
data Foo x = X x | Y Int | Z String | ...(other constructors not involving x)
Run Code Online (Sandbox Code Playgroud)
要声明一个Functor实例,我必须这样做 -
instance Functor Foo where
fmap f (X x) = X (f x)
fmap _ (Y y) = Y y
fmap _ (Z z) = Z z
... And so on
Run Code Online (Sandbox Code Playgroud)
虽然我想做的是 -
instance Functor Foo where
fmap f (X x) = X (f x)
fmap _ a = a
Run Code Online (Sandbox Code Playgroud)
即我只关心X构造函数,所有其他构造函数都只是"通过".但是当然这不会编译,因为a左边是 …