【发布时间】:2021-12-04 07:28:26
【问题描述】:
我正在尝试使用我自己的类型别名和数据构造函数来实现一个 eval 函数。这个函数应该根据输入的 Func 返回一个更新的字典 Dict 和程序计数器 Counter。基本上,如果输入正确,我希望它增加计数器。 这些是我的类型别名:
type Counter = Int
type Name = String
type Dict = Map Name Const
这是我的数据构造函数:
data Func = GET_INT Int
| GET_DICT Name
| JUMP Counter
deriving Show
这是具有函数的类,我在其中将 Func 设为它的实例:
class Evaluate a where
eval :: Func -> (Dict, Counter) -> Maybe (Dict, Counter)
instance Evaluate Func where
eval (GET_INT a)(d, c) = Just(d, c+1)
eval (GET_DICT a)(d, c) = Just(d, c+1)
eval (JUMP a)(d, c) = Just(d, c+1)
eval = Nothing
但是,我遇到了一些错误。首先,我得到以下信息:期望一个类型,但 'Counter' 有一种 'Const'
其次,我不确定我是否为 Evaluate 类输入了正确的参数,因为 a 没有在任何地方使用。另外,我认为函数的输入不会像上面那样工作。
任何人都可以帮助弄清楚如何使该功能起作用吗?
【问题讨论】:
-
您包含的代码不会产生该错误。您的代码有很多很多问题;你写的东西没有什么意义,很难说你甚至想做什么。试着把这个问题分解成更小的部分,直到你得到足够小的东西,你可以清楚地询问它。
-
你能指出我的第一个错误在哪里吗?
-
@m.18:例如你返回一个2元组,但是签名指定类型应该是
Maybe (Dict, Counter),所以你需要返回一个包装了值的Just ...,或Nothing。 -
是的,我知道返回不正确,但我专注于输入类型,因为它给了我一个错误。你能在输入参数中发现我的错误吗?
-
一个不更新任何东西的函数例如是
eval _ x = Just x。
标签: function haskell types instance