Int "String" -> String "Bool" -> Bool 即。它采用类型构造函数名称的字符串表示形式,-6ren">
gpt4 book ai didi

string - 在 Haskell 中将字符串转换为类型构造函数

转载 作者:行者123 更新时间:2023-12-02 06:56:29 25 4
gpt4 key购买 nike

有谁知道 Haskell 中是否有一个函数可以执行以下操作:

"Int" -> Int

"String" -> String

"Bool" -> Bool

即。它采用类型构造函数名称的字符串表示形式,并将其转换为实际的类型构造函数(无论是在表达式还是在模式中)。

编辑:我的总体目标是简化如下内容:

transExp (Add exp1 exp2) vars
= transExp exp1 vars ++ transExp exp2 vars ++ [IAdd]

transExp (Sub exp1 exp2) vars
= transExp exp1 vars ++ transExp exp2 vars ++ [ISub]

转换为单个模式匹配,因此基本上将 Add 或 Sub 转换为字符串,在前面添加一个“I”,然后将其转换回类型。

最佳答案

这里有一种更好的方法来重构代码,无需任何 Template Haskell 或反射恶作剧,只需将 AddSub 案例合并为一个即可:

data BinOp = Add | Sub | ...

data Expr = ...
| BinOp BinOp Expr Expr
| ...

transExp (BinOp op exp1 exp2) vars
= transExp exp1 vars ++ transExp exp2 vars ++ [transOp op]
...

transOp Add = IAdd
transOp Sub = ISub

这样,我们使用数据类型来直接表达二元运算符相关的事实,因此具有相似的翻译。如果您想在某处添加特殊情况,您仍然可以在 BinOp Add exp1 exp2 上进行模式匹配。

关于string - 在 Haskell 中将字符串转换为类型构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8165336/

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