signature ALT structure Alt : ALT
The Alt structure defines the alt type, used for holding binary alternatives (sums), and provides a collection of common combinators.
The type alt and its constructors, as well as the functions isFst and isSnd are available in the top-level environment.
Imported implicitly.
signature ALT = sig datatype ('a,'b) alt = FST of 'a | SND of 'b type ('a,'b) t = ('a,'b) alt exception Alt val isFst : ('a,'b) alt -> bool val isSnd : ('a,'b) alt -> bool val fst : ('a,'b) alt -> 'a val snd : ('a,'b) alt -> 'b val getFst : ('a,'b) alt * 'a -> 'a val getSnd : ('a,'b) alt * 'b -> 'b val app : ('a -> unit) * ('b -> unit) -> ('a,'b) alt -> unit val appFst : ('a -> unit) -> ('a,'b) alt -> unit val appSnd : ('b -> unit) -> ('a,'b) alt -> unit val map : ('a -> 'c) * ('b -> 'd) -> ('a,'b) alt -> ('c,'d) alt val mapFst : ('a -> 'c) -> ('a,'b) alt -> ('c,'b) alt val mapSnd : ('b -> 'c) -> ('a,'b) alt -> ('a,'c) alt val mapBoth : ('a -> 'b) -> ('a,'a) alt -> ('b,'b) alt val equal : ('a * 'a -> bool) * ('b * 'b -> bool) -> ('a,'b) alt * ('a,'b) alt -> bool val collate : ('a * 'a -> order) * ('b * 'b -> order) -> ('a,'b) alt * ('a,'b) alt -> order end
The type of binary sums. It is useful to pass values that can have two alternative types.
Raised on invalid accesses to alternatives.
The function isFst returns true if alt is FST v, false otherwise. The function isSnd returns true if alt is SND v, false otherwise.
The function fst returns v if alt is FST v, and raises Alt otherwise. The function snd returns v if alt is SND v, and raises Alt otherwise.
The function getFst returns v if alt is FST v, else v'. The function getSnd returns v if alt is SND v, else v'.
The function app applies the functions f or g to the given constituent value of alt, respectively. For the functions appFst and appSnd the following equivalences hold:
appFst f alt = app (f, ignore) alt appSnd g alt = app (ignore, g) alt
The function map produces an alternative by mapping the functions f or g on the constituent value of alt. For the functions mapFst, mapSnd and mapBoth the following equivalences hold:
mapFst f alt = map (f, id) alt mapSnd g alt = map (id, g) alt mapBoth f alt = map (f, f) alt
where id is the identity function.
Creates an equality function on alternatives, given suitable equality functions for each constituent type.
Performs comparison on alternatives, given suitable orderings f and g for the respective constituent types. The constructed ordering is defined as follows:
fun collate (f, g) = fn (FST x1, FST x2) => f (x1, x2) | (SND y1, SND y2) => g (y1, y2) | (FST _, SND _ ) => LESS | (SND _, FST _ ) => GREATER