Haskell - 采用相同映射的函数的映射

时间:2015-09-01 15:25:15

标签: haskell recursion types

我目前正在Haskell中编写一种编程语言。这种编程语言类似于Factor,是一种基于堆栈的串联语言。然而,在走了很远之后,我碰到了一堵砖墙:我有一个类型的Data.Map:

Map.Map String ([YodaVal] -> YodaVal, Int) 但我需要存储在map中的函数将map作为参数,因此我可以在递归时保留环境,也可以允许递归函数定义,以及Haskell的递归定义 - >尤达的功能。但是,类型将如下所示:

type Env = Map.Map String ([YodaVal] -> Env -> [YodaVal] -> YodaVal, Int) 当然扩展到:

Map.Map String ([YodaVal] -> Map.Map String ... -> [YodaVal] -> YodaVal, Int)

1 个答案:

答案 0 :(得分:6)

您可以使用newtype来描述无限类型:

newtype Env = Env {getEnv :: Map String ([Val] -> Env -> [Val] -> Val, Int))}

这将是类型检查,运行时表示就好像没有包装器一样。