Skip to content

Latest commit

 

History

History
770 lines (253 loc) · 9.83 KB

scmd_types_impl.md

File metadata and controls

770 lines (253 loc) · 9.83 KB

Module scmd_types_impl

Scheme datum implementation types (for Erlang types and specs)

. __Authors:__ Joseph Wayne Norton ([`[email protected]`](mailto:[email protected])).

Data Types


bytes() = <<_:_*8>>
0..255

integer_non_zero() = neg_integer() | pos_integer()

lineno() = non_neg_integer()

s_boolean() = #boolean{val = t_boolean()}

s_bytevector() = #bytevector{val = t_bytevector()}

s_character() = #character{val = t_character()}

s_complex() = s_rectangular() | s_polar() | s_real()

s_datum() = s_any(s_datum())

s_denominator() = s_integer_exact_pos()

s_false() = #boolean{val = t_false()}

s_finite_exact() = s_rational() | s_integer_exact()

s_finite_inexact() = s_negzero() | float() | s_integer_inexact()

s_identifier() = t_identifier()

s_infnan() = '?PINF' | '?NINF' | '?PNAN' | '?NNAN'

s_integer_exact() = integer()

s_integer_exact_neg() = neg_integer()

s_integer_exact_non_neg() = non_neg_integer()

s_integer_exact_non_zero() = integer_non_zero()

s_integer_exact_pos() = pos_integer()

s_integer_inexact() = float()
trunc(float()) == float()

s_label(T) = #label{val = t_label(T)}

s_labelref() = #labelref{val = t_labelref()}

s_letter() = #character{val = t_letter()}

s_list(T) = t_list(T)

s_list_nonempty(T) = t_list_nonempty(T)

s_negzero() = '?NZER'

s_number() = s_complex()

s_numerator() = s_integer()

s_pair(T) = t_pair(T)

s_polar() = {polar, {Mag::s_real(), Ang::s_rational()}}

s_rational() = {s_numerator(), s_denominator()}

s_real() = s_infnan() | s_finite()

s_rectangular() = {rectangular, {Real::s_real(), Imag::s_real()}}

s_string() = #string{val = t_string()}

s_symbol() = t_symbol()

s_true() = #boolean{val = t_true()}

s_vector(T) = #vector{val = t_vector(T)}

t_boolean() = boolean()

t_bytevector() = bytes()

t_character() = unichar()

t_false() = false

t_identifier() = atom() | {atom(), utf8()} | #mid{val = t_symbol()}
atom(utf-8()) | {atom(sha(utf-8())), utf-8()} | #mid{}

t_label(T) = {non_neg_integer(), T}

t_labelref() = non_neg_integer()

t_letter() = 65..90 | 97..122

t_list(T) = maybe_improper_list(T, T | [])

t_list_nonempty(T) = nonempty_maybe_improper_list(T, T | [])

t_pair(T) = nonempty_maybe_improper_list(T, T)

t_string() = {unichar()}

t_symbol() = t_identifier() | t_variable()

t_true() = true

t_variable() = reference() | {reference(), t_symbol()}

t_vector(T) = {T}
tuple of any size
unicode "code point"

unichar_high() = 57344..1114111

unichar_low() = 0..55295

utf8() = <<_:_*8>>
utf-8