2016-05-01 32 views
0

我是Haskell的初学者,这是haskell的一个简单问题。函数“更新”让我在v回复s [v | - > i] Haskell

我只是试图写一个功能更新以下签名,使 update s i v返回状态更新s[v |-> i]。即通过将v的值更新为i而从s获得的状态。这里

我的代码是:

type Num = Integer 
type Var = String 
type Z = Integer 
type T = Bool 
type State = Var -> Z 

而且我想要写一个函数

但是,当我编译此,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型

回答

1

,你必须返回一个功能较新状态(状态似乎是从Var -> Z功能:

update :: State -> Z -> Var -> State 
update oldState i v = newState 
    where newState v' 
      | v == v' = i 
      | otherwise = oldState v 

让我们看看你的版本中的主要问题:

  • v i将表明你想在i评估v - 但vVar ~ String让您获得编译器错误(说Var没有参数)
  • 你甚至不使用s这应该表明你要么真的不需要它,或者你忘了使用它;)
+0

谢谢@Carsten!我现在明白这一点。谢谢你的帮助 – newinjava

+0

没问题 - 如果你觉得这回答你的问题,你可以选择标记为一个,这样其他人就可以看到这个问题已经完成 – Carsten