我正在将以下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 ×1