SML/NJ代码在REPL中工作,但无法编译

SML/NJ代码在REPL中工作,但无法编译,sml,uncaught-exception,Sml,Uncaught Exception,在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 但如果保存在文件中并进行编译,则表

在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\u 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中键入这两个表达式时,它们就会工作。什么可能导致此错误?此外,如果相关的话,关于我的数据类型和类型定义的评论是非常受欢迎的,因为我认为自己不适合这个主题。

在两个表达式之前添加val语句,如:

val x = aow my_seat
val y = is_window my_seat
让文件编译。看到这一点,我也尝试在aow和is_窗口功能之前替换fun。但是,这会导致以下逻辑错误:

Error: syntax error: replacing  VAL with  FUN
显然,SML在编译期间不允许自由的表达式