gpt4 book ai didi

haskell - 如何提取文字幻像类型的值?

转载 作者:行者123 更新时间:2023-12-02 01:26:47 25 4
gpt4 key购买 nike

我使用类型横向幻象类型(状态)来更改记录字段的类型(通过类型族)。我怎样才能取回值(value)?

假设我有以下代码:

{-# LANGUAGE TypeFamilies, DataKinds #-}

data Status = Valid | Invalid deriving(Show)

data A s = A (TF s)

type family TF (s:: Status) where
TF Valid = Int
TF Invalid = Either String Int

status :: A s -> Status
status = ???

如何写状态?

更新

澄清一下,s 是 Status 类型的值。因此,我希望 status (A 3::A Valid)(例如)为 Valid

更新2

我找到了一个带有类型类的解决方案(参见我自己的答案),但是我更喜欢一种将类型降级为其值的方法。

最佳答案

你不能写你的函数 status::A s -> Status 仅仅是因为(在 GHC 中)函数在运行时不接收任何类型的参数表示,并且不知道任何事情关于 s,您在 A s 类型的参数中没有有用的信息。无论 s 是否具有从数据类型提升的种类或像 * 这样的传统种类,这都适用。

为了获取运行时变化的信息(您的 Status 结果),您必须提供一些运行时变化的输入。正如您所发现的,这可以是类型类上下文,或者您可以将信息添加到 A 本身:

data A (s :: Status) where
A1 :: Int -> A Valid
A2 :: Either String Int -> A Invalid

然后您可以通过对参数进行模式匹配来实现status

关于haskell - 如何提取文字幻像类型的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36695695/

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