gpt4 book ai didi

记录的 Purescript 默认 `Show` 实例

转载 作者:行者123 更新时间:2023-12-04 18:27:19 25 4
gpt4 key购买 nike

我看到了这个问题:

  • Force show a record in PureScript

  • 我发现我可以使用 purescript-debug 来打印它,例如通过使用:
    > traceAny {a:1} id
    { a: 1 }
    unit

    然而,我想知道没有默认值背后的基本原理是什么 Show记录实例:
    > {a:1}
    Error found:
    in module $PSCI

    No type class instance was found for

    Data.Show.Show { "a" :: Int
    }

    最佳答案

    Show只是作为库代码实现的,因此无法编写可以容纳每条可能记录的实例。例如,需要某种约束,您可以说“此记录中每个值的类型也必须有一个 Show 实例”。实际的实现也需要有点神奇,因为你也不能迭代记录中的标签。

    已经有一些关于改革的讨论Show , such as this one ,这可能会解决这个问题,通过制作 Show完全神奇,仅可用于调试目的。

    虽然这并不能真正解决您在这里遇到的情况,但可以依靠 Generic推导制作 Show newtype 的实例'd 记录,这可以减轻这种事情的一些痛苦:

    import Data.Generic (class Generic, gShow)

    newtype MyRecord = MyRecord { a :: Int }

    derive instance genericMyRecord :: Generic MyRecord

    instance showMyRecord :: Show MyRecord where
    show = gShow

    如果你推导出 Newtype它也使记录更易于使用,因为您可以使用各种有助于在 newtype 下进行包装/展开/操作等的操作。

    关于记录的 Purescript 默认 `Show` 实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42283016/

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