Я хотел бы создать объявление типа записи, такое как
type 'a cx = { foo : string, handler : 'a cx -> 'a cx }
, но этот код не компилируется.
Я также пробовал "взаимно рекурсивные объявления синонимов типов", вроде
type 'a cx = { foo : string, handler : 'a hnd }
and 'a hnd = 'a cx -> 'a cx;
безуспешно.
В Haskell это будет
data Cx a = MkCx { foo :: String, handler :: Cx a -> Cx a }
Как мне добиться этого в SML?
ОБНОВЛЕНИЕ
Это возможно с взаимно рекурсивными типами данных
datatype 'a cx = MkCx of string * ('a hnd)
and 'a hnd = MkHnd of 'a cx -> 'a cx;
, но это уродливо и нет хорошего синтаксиса записи с неупорядоченным доступом.