我是Haskell的初学者,这是haskell中的一个简单问题。
我只想尝试使用以下签名编写函数更新
update s i v
返回状态更新s[v |-> i]
。即通过将s
的值更新为v
从i
获得的状态。
我的代码是:
type Num = Integer
type Var = String
type Z = Integer
type T = Bool
type State = Var -> Z
我试图写的是一个函数
update :: State -> Z -> Var -> State
update s i v = v i
但是当我编译它时,ghci给出了
couldn't match expected type 'Z -> State' with actual type '[Char]'. The function 'v' is applied to one argument, but its type 'Var' has none
令我困惑的是,我不想在这里Z -> State
。任何人都可以给我任何提示吗?如果我没有说清楚这个问题,我很抱歉。我昨天开始学习Haskell:O
答案 0 :(得分:1)
你必须返回一个代表你的新状态的函数(状态似乎是来自Var -> Z
的函数:
update :: State -> Z -> Var -> State
update oldState i v = newState
where newState v'
| v == v' = i
| otherwise = oldState v
让我们看看你的版本的主要问题:
v i
表示您想在v
评估i
- 但v
是Var ~ String
,因此您会收到编译错误(说{ {1}}没有参数)Var
这应该表明你真的不需要它或你忘了使用它;)