2016-05-01 13 views
0

私はHaskellの初心者です。これはhaskellの簡単な質問です。Haskellでs i vがs [v | - i]を返す関数 "update"

私は、 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のを習い始め:

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

はのは、あなたのバージョンとの主な問題点を見てみましょう:O

答えて

1

あなたの新しい状態を表す関数を返す必要が(状態はVar -> Zから関数のようです:

  • v iは、あなたがivを評価したいことを示すことになる - しかしvは0123ですので、あなたがあなたも、これはあなたが本当にそれを必要としないいずれか、またはあなたがそれを使用するのを忘れたことを示す必要がありsを使用していないコンパイラエラー(Varは引数を持っていないことを言って)
  • を得る;)
+0

をありがとう@カルステン!私は今これを理解しています。助けてくれてありがとう – newinjava

+0

問題はありません - これがあなたの質問に答えると感じたら、それを1とマークすることを選ぶことができますので、他の人がこの質問が終わったことを見ることができます – Carsten

関連する問題