【发布时间】:2011-12-31 05:00:21
【问题描述】:
有谁知道 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”,然后再转换回一个类型。
【问题讨论】:
-
这可能吗?类型不是编译时概念吗?您正在寻找的功能是什么类型的?
-
我不知道这是否可能,我想它的类型是 String -> a,但我真的不确定......
-
然后看看模板haskell。此外,
IAdd不是类型,而是类型构造函数——这具有误导性。 -
查看您的示例,您似乎不想将字符串转换为类型构造函数,但您想将其转换为值构造函数。这可能使用
read ("I" ++ x)来实现。但不要这样做!如果您使用字符串在不同类型之间进行转换,则会出现问题。
标签: string haskell types template-haskell