相关疑难解决方法(0)

记录类型没有类型构造函数?

我正在将以下Haskell代码转换为OCaml:

data NFA q s = NFA
{ intialState :: q
, isAccepting :: q -> Bool
, transition  :: q -> s -> [q]
}
Run Code Online (Sandbox Code Playgroud)

最初我尝试了一个非常直译:

type ('q,'s) nfa = NFA of { initialState: 'q;
                            isAccepting:  'q -> bool;
                            transition:   'q -> 's -> 'q list }
Run Code Online (Sandbox Code Playgroud)

...当然,这会产生语法错误,因为不允许使用类型构造函数部分"NFA of".它一定要是:

 type ('q,'s) nfa = { initialState: 'q;
                      isAccepting:  'q -> bool;
                      transition:   'q -> 's -> 'q list }
Run Code Online (Sandbox Code Playgroud)

这让我想知道为什么会这样.为什么不能像记录类型那样拥有记录类型的类型构造函数(如下所示)?

type ('q, 's) dfa = NFA of ('q * ('q->bool) …
Run Code Online (Sandbox Code Playgroud)

ocaml

7
推荐指数
1
解决办法
1536
查看次数

标签 统计

ocaml ×1