Как мы сопоставляем матч с GADT? В этом случае у меня возникают проблемы с GADT из Bigarray. Более конкретно, кодКак сопоставить матч по GADT в Bigarray?
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
?
Этот синтаксис лучше, чем то, что я нашел в своих поисках :-) Спасибо! –