gxt*_*lon 6 haskell show either maybe deriving
Either被定义为派生Show,简单地说:
data Either a b = Left a | Right b
deriving (Eq, Ord, Read, Show, Typeable)
Run Code Online (Sandbox Code Playgroud)
然而,Maybe不是:
data Maybe a = Nothing | Just a
deriving (Eq, Ord)
Run Code Online (Sandbox Code Playgroud)
既然它们是一部分base并且如此相似,为什么不Maybe直接导出Show?
另一个问题也可能是,它在哪里得到它的Show实例?
Tik*_*vis 10
实例for Maybe是明确定义的GHC.Show,以及一大堆其他常见类型(如元组)的实例.您可以使用以下:i命令找出实例的定义位置ghci:
Prelude> :i Maybe
data Maybe a = Nothing | Just a -- Defined in ‘Data.Maybe’
instance Eq a => Eq (Maybe a) -- Defined in ‘Data.Maybe’
instance Monad Maybe -- Defined in ‘Data.Maybe’
instance Functor Maybe -- Defined in ‘Data.Maybe’
instance Ord a => Ord (Maybe a) -- Defined in ‘Data.Maybe’
instance Read a => Read (Maybe a) -- Defined in ‘GHC.Read’
instance Show a => Show (Maybe a) -- Defined in ‘GHC.Show’
Run Code Online (Sandbox Code Playgroud)
我不知道为什么他们明确地定义了实例,或者把它放在 - GHC.Show而不是Data.Maybe- 据我所知,它可以被移动到Data.Maybe和/或派生.我的猜测是他们不想Data.Maybe依赖任何东西,除了GHC.Base(就像现在这样),大概是因为它被用在其他一些核心模块中.