gpt4 book ai didi

purescript - 定义 ADT 的显示实例

转载 作者:行者123 更新时间:2023-12-02 03:43:09 25 4
gpt4 key购买 nike

我尝试为 ADT 定义一个 show 实例,但收到错误声明 show 中的参数列表长度不同。如何在不使用 Generic 的情况下完成这项工作?

data Route = Home | Users String | User Int | NotFound String

instance showRoute :: Show Route where
show Home = "Home"
show Users str = "Users"
show User i = "User"
show NotFound str = "404"

最佳答案

您必须将构造函数的参数放在括号中。尝试这样的事情:

instance showRoute :: Show Route where
show Home = "Home"
show (Users str) = "Users"
show (User i) = "User"
show (NotFound str) = "404"

显示相关附注:

您还可以使用purescript-generic-reps为这样一个简单类型派生Show实例,但您必须为Generic派生实例第一:

import Data.Generic.Rep (class Generic)
import Data.Show.Generic (genericShow)

data Route = Home | Users String | User Int | NotFound String
derive instance genericRoute :: Generic Route _

instance showRoute :: Show Route where
show = genericShow

我制作了简单的代码片段,以便您可以在 try.purescript.org 上使用它

甚至可以混合使用这两种方法:

instance showRoute :: Show Route where
show (Users u) = "CusomUsersShow " <> u
show u = genericShow u

出于调试目的,您始终可以使用 purescript-debug 中的 traceAny(traceAnyAspy 等) >。就我个人而言,我仅在必要时才编写 Show 实例(例如由 purescript-test-unit 强制)。

关于purescript - 定义 ADT 的显示实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47797272/

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