为了获得一门课程的荣誉学分,我的任务是重新创建我们在 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
我很难弄清楚这些定义的正确语法。请回复任何有助于我在这方面取得进展的提示。请记住,这是为了荣誉 - 我不期望任何完整的解决方案,而只是一些帮助(不是我会拒绝解决方案)。