me2*_*me2 6 haskell types typeclass
可以说我有以下内容:
data Greek = Alpha | Beta | Gamma | Phi deriving Show
Run Code Online (Sandbox Code Playgroud)
我想使用除Beta之外的所有项目的默认显示,我想说"两个".
我可以这样做吗?
pok*_*oke 17
deriving Show
使用标准实例化机制(简单地返回定义).如果你想要任何特殊的东西,你必须手动实例化它:
data Greek = Alpha | Beta | Gamma | Phi
instance Show Greek
where
show Alpha = "Alpha"
show Beta = "2"
show Gamma = "Gamma"
show Phi = "Phi"
Run Code Online (Sandbox Code Playgroud)
并不是说这完全令人满意,但你可以做到:
data Greek = Alpha | Beta | Gamma | Phi
deriving (Show)
showGreek Beta = "2"
showGreek x = show x
Run Code Online (Sandbox Code Playgroud)
并使用showGreek而不是show.如果你需要一个真正的show实例(在我的代码中我发现我需要这个比初学者倾向于认为的少),你可以做相当麻烦的事情:
newtype Greek' = Greek' Greek
instance Show Greek' where
show (Greek' g) = showGreek g
Run Code Online (Sandbox Code Playgroud)
如果是我的代码,我会坚持下去showGreek
.
我使用的一个很好的经验法则是Show和Read实例只是Haskell生成的.如果show不生成有效的Haskell代码,则它不应该在Show实例中.
归档时间: |
|
查看次数: |
686 次 |
最近记录: |