功能"更新"让s i v返回s [v | - >我在哈斯克尔

时间:2016-05-01 07:40:32

标签: haskell

我是Haskell的初学者,这是haskell中的一个简单问题。

我只想尝试使用以下签名编写函数更新 update s i v返回状态更新s[v |-> i]。即通过将s的值更新为vi获得的状态。

我的代码是:

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

1 个答案:

答案 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 - 但vVar ~ String,因此您会收到编译错误(说{ {1}}没有参数)
  • 你甚至不使用Var这应该表明你真的不需要它或你忘了使用它;)