gpt4 book ai didi

haskell - 将数据构造函数映射到类型

转载 作者:行者123 更新时间:2023-12-04 17:17:46 24 4
gpt4 key购买 nike

我正在创建一个应用程序,允许管理员构建一个用户可以填写的表单。问题可以是不同类型的。每种问题对应一种响应数据。

是否可以在类型级别对此进行编码?你会如何组织这个?

data QuestionType = EmailText | PlainText | Numeric

-- this doesn't have any response information, it's the metadata
-- about the question itself.
data Question = { id :: ID, label :: Text, questionType :: QuestionType }

data Answer = { questionID :: ID, response :: Response }

-- I would like to map those question types to different response types
data Response = ???
-- EmailText => Text
-- PlainText => Text
-- Numeric => Int

我想过类型族,它可以完美地工作,只是我想从不同的数据构造函数映射到不同的类型,并且类型族需要为每个类型提供单独的类型。

这将非常适合单个 ADT,每个构造函数中都包含响应信息,但我需要能够独立于响应处理问题类型。

我应该如何处理这个问题?

最佳答案

我还没有完全理解你到底想要什么,但也许这可以是一个起点:

{-# LANGUAGE DataKinds, GADTs #-}

data Response (qt :: QuestionType) where
RPlainText :: Text -> Response PlainText
REmailText :: Text -> Response EmailText
RNumeric :: Int -> Response Numeric

data Answer qt = Answer {questionID :: ID, response :: Response qt}

如果您不想要 qt参数在 Answer qt ,您可能需要存在类型来隐藏它,但此时您可能希望以某种方式将它与问题联系起来。

关于haskell - 将数据构造函数映射到类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33308987/

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