Приведенный ниже код работает при вводе в REPL:
type seat = seat_type * int
val my_seat = (Window, 13)
fun aow seat =
case seat of
(Window,_) => "Window"
| (Aisle,_) => "Aisle"
fun is_window (x,_) = x = Window
aow my_seat
is_window my_seat
Но если они сохранены в файле и скомпилированы, выражения aow my_seat
и is_window my_seat
завершатся неудачно со следующей ошибкой во время компиляции:
test1.sml:12.23-16.18 Error: operator is not a function [tycon mismatch]
operator: seat_type
in expression:
Window aow
uncaught exception Error
raised at: ../compiler/TopLevel/interact/evalloop.sml:66.19-66.27
../compiler/TopLevel/interact/evalloop.sml:44.55
../compiler/TopLevel/interact/evalloop.sml:296.17-296.20
Если я их закомментирую, файл компилируется, и когда я набираю оба выражения в REPL, они работают. Что может вызвать эту ошибку? А также, если это уместно, комментарии о моем типе данных и определениях типов более чем приветствуются, поскольку я не считаю себя подходящим для этого.