Skip to content

Latest commit

 

History

History
704 lines (232 loc) · 9.29 KB

scmi_types.md

File metadata and controls

704 lines (232 loc) · 9.29 KB

Module scmi_types

Scheme interpreter types (for Erlang types and specs)

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

Data Types


arg() = exp()

body() = dexec()

denv() = scmi_env:env()

dexec() = fun((denv(), dok(), dng()) -> exp())

dng() = fun((exp()) -> no_return())

dok() = fun((exp(), dng()) -> exp())

eof() = '?EOF'
?EOF

error_file() = #error_file{val = exp()}

error_read() = #error_read{val = exp()}

error_user() = #error_user{val = [exp(), ...]}

exception() = #exception{val = [signal()]} | #cexception{val = [signal()]}

exp() = scm_any()

expander() = #expander{val = sexec()}

f() = f0() | fn() | fv() | fnv()

f0() = fun(() -> exp())

fn() = fun((...) -> exp())
fun((arg(),...) -> exp()).

fnv() = fun((...) -> exp())
fun((arg(),...,vargs()) -> exp()).

fv() = fun((vargs()) -> exp())

iodev() = scmi_iodev:iodev()

l() = l0() | ln() | lv() | lnv()

l0() = #l0{body = body(), env = denv(), src = src()}

lip() = lip0() | lipn() | lipv() | lipnv()

lip0() = #lip0{val = l0()}

lipn() = #lipn{val = ln() | [ln()]}

lipnv() = #lipnv{val = lnv()}

lipv() = #lipv{val = lv()}

ln() = #ln{params = params(), body = body(), env = denv(), src = src()}

lnv() = #lnv{n = pos_integer(), params = params(), body = body(), env = denv(), src = src()}

lv() = #lv{param = param(), body = body(), env = denv(), src = src()}

nip() = nip0() | nipn() | nipv() | nipnv()

nip0() = #nip0{val = f0()}

nipn() = #nipn{val = fn() | [fn()]}

nipnv() = #nipnv{val = fnv()}

nipv() = #nipv{val = fv()}

param() = var()

params() = [param()]

proc() = nip() | xnip() | lip()

sexec() = fun((exp(), senv()) -> expander() | dexec())

signal() = #signal{obj = exp(), env = denv(), ok = dok(), ng = dng()}

src() = fun(() -> [exp()])

thunk() = nip0() | xnip0() | lip0()

var() = scm_symbol() | reference()

vargs() = [arg()]

xf() = xf0() | xfn() | xfv() | xfnv()

xf0() = fun((denv(), dok(), dng()) -> exp())

xfn() = fun((...) -> exp())
fun((arg(),... ,denv(), dok(), dng()) -> exp()).

xfnv() = fun((...) -> exp())
fun((arg(),... ,vargs(), denv(), dok(), dng()) -> exp()).

xfv() = fun((vargs(), denv(), dok(), dng()) -> exp())

xnip() = xnip0() | xnipn() | xnipv() | xnipnv()

xnip0() = #xnip0{val = xf0()}

xnipn() = #xnipn{val = xfn() | [xfn()]}

xnipnv() = #xnipnv{val = xfnv()}

xnipv() = #xnipv{val = xfv()}