【发布时间】:2016-03-30 11:02:37
【问题描述】:
我在 haskell 中做某种编译器,我遇到了这个问题:
这是我目前的代码:
data Command a = Input a | Print a
readCommand:: Read a => String -> Command a
readCommand entrada
| tokens!!0 == "INPUT" = Input (tokens!!1)
| tokens!!0 == "PRINT" = Print (tokens!!1)
where
tokens = words entrada
listInstr = lines entrada
但我收到此错误:
无法将类型 'a' 与 'String' 匹配; 'a' 是一个严格的类型变量,由 readC:: Read a => String -> Command a 的类型签名绑定
预期类型:[a];实际类型:[String]
这个错误是否意味着如果我在函数上声明我有一个字符串,类型'a'也不能是一个字符串?
感谢您的帮助
【问题讨论】:
-
我猜你在哪里寻找
...= Input (read $ tokens!!1)...这将尝试read输入字符串中的单词/标记到你的类型a -
顺便说一句:也许你应该从一个应该首先处理不同类型的标记(数据类型)的解析器开始?
-
PS 这意味着你承诺返回一个
a,但后来只产生了一个String- 所以如果我说readCommand "INPUT 12" :: Command Int,你应该会看到问题 -
感谢您的回答,是的,我有许多其他数据类型,我只是不想发布有关我的问题的不必要信息
标签: haskell