Это невозможно в стандартном ML.(В некоторых реализациях вы можете написать файл и прочитать его во время выполнения, используя use
, но это, как правило, вызывает недовольство.)
Haskell может сделать это:
$ ghci
GHCi, version 8.0.1: http://www.haskell.org/ghc/ :? for help
Prelude> data Day = Mon | Tue | Wed | Thu | Fri | Sat | Sun deriving (Enum, Show)
Prelude> succ Mon
Tue
Prelude> succ Sun
*** Exception: succ{Day}: tried to take `succ' of last tag in enumeration
CallStack (from HasCallStack):
error, called at <interactive>:5:62 in interactive:Ghci2
Предложение deriving
указывает компилятору автоматически реализовать класс Enum
, который обеспечивает функцию succ
.(Класс Show
существует только для того, чтобы мы могли печатать результаты.) deriving
- это специальный механизм, встроенный в компилятор Haskell, но GHC предоставляет множество средств метапрограммирования.