gpt4 book ai didi

haskell - `show` 记录无推导显示

转载 作者:行者123 更新时间:2023-12-02 13:45:58 26 4
gpt4 key购买 nike

我经常需要在调试时打印一些内容,除非我需要查看的数据类型派生 Show 我无法打印它。对于某些数据类型,我无法将派生(显示) 添加到定义中,因为它可能位于库中或我无法访问的其他位置。

我可以打印这些数据类型进行调试吗?

最佳答案

独立导出

类型定义上的deriving子句并不是唯一的派生方法。您还可以使用StandaloneDeriving GHC 语言扩展。

λ> :set -XStandaloneDeriving

λ> data Person = Human { name :: String, age :: Int } | Dog { goodPupper :: Bool }

λ> deriving instance Show Person

λ> Human "Chris" 31
Human {name = "Chris", age = 31}

泛型

如果该类型具有 Generic 实例,您可以使用 gshowsPrecdefault 将其字符串化。来自 generic-deriving 的函数包。

λ> import GHC.Generics
λ> import Generics.Deriving.Show

λ> data Person = Human { name :: String, age :: Int } | Dog { goodPupper :: Bool } deriving Generic

λ> putStrLn $ gshowsPrecdefault 0 (Dog True) ""
Dog {goodPupper = True}

GHCi:强制

您可以在 GHCi 中使用 :force 命令来检查值。

λ> data Person = Human { name :: String, age :: Int } | Dog { goodPupper :: Bool }

λ> x = Human "Chris" 31

λ> x
<interactive>:17:1: error:
• No instance for (Show Person) arising from a use of ‘print’
• In a stmt of an interactive GHCi command: print it

λ> :force x
x = <Human> "Chris" 31

参见Breakpoints and inspecting variables在 GHC 手册中。

关于haskell - `show` 记录无推导显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49472878/

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