コースの優等単位を取得するために、ML で完了した課題を (SMLNJ 実装を使用して) 再作成する任務を負っていますが、代わりに haskell を使用しています。ここでの目標は、値を文字列にバインドするデータ型環境を作成することです。
ML の型宣言は次のとおりです。
type 'a Env = string -> 'a;
作成される基本的な関数env_new()
は、空の環境を作成する関数とenv_bind()
、環境、文字列、および値を受け取り、新しい環境を返すときに文字列を値にバインドする関数です。
ML 機能を示すテストは次のとおりです。
- val e1 = env_new() : int Env;
val e1 = fn : int Env
- val e2 = env_bind e1 "a" 100;
val e2 = fn : int Env
- val e3 = env_bind e2 "b" 200;
val e3 = fn : int Env
- e1 "a";
uncaught exception NameNotBound
- e2 "a";
val it = 100 : int
- e3 "a";
val it = 100 : int
Haskell および関連する関数でのこの型の現在の宣言は次のとおりです。
data Env a = Env String a
envNew :: a -> Env a
envNew a = Env a
envBind :: Env a -> String -> a -> Env a
envBind environment name value = Env name value
これらの定義の適切な構文を理解するのに非常に苦労しています。これを進めるのに役立つヒントがあれば返信してください。これは名誉のためのものであることを念頭に置いてください - 私は完全な解決策を期待するのではなく、単に何らかの支援を期待しています (解決策を拒否するわけではありません)。