2016-05-01 45 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