gpt4 book ai didi

haskell - 在 Haskell 中访问 "default show"?

转载 作者:行者123 更新时间:2023-12-04 09:30:56 26 4
gpt4 key购买 nike

假设您有一个数据结构(借自 question ):

data Greek = Alpha | Beta | Gamma | Delta | Eta | Number Int

现在可以使它成为 Show 的实例。通过附加 deriving Show在那条指令上。

说但是我们希望显示 Number Int作为:
instance Show Greek where
show (Number x) = show x
-- ...

问题是必须指定 Greek 的所有其他部分。数据以及:
    show Alpha = "Alpha"
show Beta = "Beta"

对于这个小例子,这当然是可行的。但是如果选项的数量很长,则需要大量的工作。

我想知道是否可以访问“默认显示”实现并使用通配符调用它。例如:
instance Show Greek where
show (Number x) = show x
show x = defaultShow x

因此,您“实现”了与默认方法不同的特定模式,其余模式由“回退机制”解决。

有点类似于引用 super.method 的方法覆盖。在面向对象编程中。

最佳答案

正如@phg 在评论中指出的那样,这也可以在 generic-deriving 的帮助下完成。 :

{-# LANGUAGE DeriveGeneric #-}
module Main where

import Generics.Deriving.Base (Generic)
import Generics.Deriving.Show (GShow, gshow)

data Greek = Alpha | Beta | Gamma | Delta | Eta | Number Int
deriving (Generic)

instance GShow Greek
instance Show Greek where
show (Number n) = "n:" ++ show n
show l = gshow l

main :: IO ()
main = do
print (Number 8)
print Alpha

关于haskell - 在 Haskell 中访问 "default show"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28665917/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com