我們如何在GADT上進行模式匹配?在這種情況下,我遇到了Bigarray的GADT問題。更具體地說,該代碼如何在Bigarray的GADT上進行模式匹配?
let print_layout v = match Bigarray.Genarray.layout v with
| Bigarray.C_layout -> Printf.printf "C layout\n"
| Bigarray.Fortran_layout -> Printf.printf "Fortran layout\n"
失敗,出現錯誤消息
Error: This pattern matches values of type
Bigarray.fortran_layout Bigarray.layout
but a pattern was expected which matches values of type
Bigarray.c_layout Bigarray.layout
Type Bigarray.fortran_layout is not compatible with type
Bigarray.c_layout
它抱怨Bigarray.Fortran_layout
情況下進行編譯。如果我們看一下Bigarray
我們看到
type c_layout = C_layout_typ
type fortran_layout = Fortran_layout_typ
type 'a layout =
C_layout : c_layout layout
| Fortran_layout : fortran_layout layout
所以,這是一個GADT,我做錯了什麼與模式匹配。什麼是print_layout
的工作版本?
此語法比我在我的搜索中找到的更好:-)謝謝! –