++cork
Compose forward
Build f
such that (f x) .= (b (a x))
.
Accepts
a
is a noun.
b
is a gate.
Source
++ cork |*([a=_|=(* **) b=gate] (corl b a))
Examples
> (:(cork dec dec dec) 20)
17
> =mal (mo (limo a+15 b+23 ~))
> ((cork ~(got by mal) dec) %a)
14
> ((cork ~(got by mal) dec) %b)
22
++corl
Compose backward
Build f
such that
Accepts
a
is a gate.
b
is a noun.
Source
++ corl
|* [a=gate b=_|=(* **)]
=< +:|.((a (b))) :: span check
|* c=_+<.b
(a (b c))
Examples
> ((corl (lift bex) (slat %ud)) '2')
[~ 4]
++curr
Right curry
Right-curry a gate, binding the tail of its sample
Accepts
a
is a gate.
c
is a noun.
Produces
A gate.
Source
++ curr
|* [a=_|=(^ **) c=*}
|* b=_+<+.a
(a b c)
Examples
> =tep (curr scan sym)
> `@t`(tep "asd")
'asd'
> `@t`(tep "lek-om")
'lek-om'
++cury
Curry left
Curry a gate, binding the head of its sample
Accepts
a
is a gate.
b
is a noun.
Produces
A gate.
Source
++ cury
|* [a=_|=(^ **) b=*}
|* c=_+<+.a
(a b c)
Examples
> =mol (cury add 2)
> (mol 4)
6
> (mol 7)
9
++hard
Force remold
Demands that a specific type be produced, crashing the program if it is not.
Source
++ hard
|* han=gate
|= fud=* ^- han
~_ leaf+"hard"
=+ gol=(han fud)
?>(=(gol fud) gol)
Examples
> ((hard (list)) (limo [1 2 3 ~]))
~[1 2 3]
> ((hard @) (add 2 2))
4
> ((hard @t) (crip "Tape to cord, bro!"))
'Tape to cord, bro'
> ((hard tape) (crip "...Tape to cord, bro?..."))
! hard
! exit
++soft
Maybe remold
Politely requests a specific type to be produced, producing null if it is not.
Source
++ soft
|* han=gate
|= fud=* ^- (unit han)
=+ gol=(han fud)
?.(=(gol fud) ~ [~ gol])
Examples
> ((soft %4) (add 2 2))
[~ %4]
> ((soft @) (add 2 2))
[~ 4]
> ((soft %5) (add 2 2))
~
> ((soft @t) (crip "Tape to cord, Woohoo!"))
[~ 'Tape to cord, Woohoo!']
> ((soft @t) (trip 'Cmon man... Tape to cord? Please?!'))
~
++head
Get head
Produces the head of a cell.
Accepts
A cell.
Produces
An atom.
Source
++ head |*(^ ,:+<-)
Examples
> (head [1 2])
1
> (head [[1 1] 2])
[1 1]
> (head "hello")
'h'
++same
Identity
Produces the same value that it was given.
Accepts
A noun.
Produces
A noun.
Source
++ same |*(* +<)
Examples
> (same [1 2])
[1 2]
> (same [[1 1] 2])
[[1 1] 2]
> (same "hello")
"hello"
++slog
Deify printf
Produces a stack trace if the stack trace isn't null, then produces the other input.
Accepts
A tang
.
Produces
A tang
.
Source
++ slog
=| pri=@
|= a=tang ^+ same
?~(a same ~>(%slog.[pri i.a] $(a t.a)))
Examples
> =+ result=((slog [%leaf "error-message"]~) [12 13]) [%product result]
[%product 12 13]
Discussion
slog
is intended to be put in the middle of a bunch of chained function
calls that string a piece of data through them, so that an error message will be
printed if there's one to print.
++mean
Crash and printf
Ends the program and produces a tang
tracing error message.
Accepts
a
is a tang.
Produces
A crash.
Source
++ mean
|= a=tang
^+ !!
?~ a !!
~_(i.a $(a t.a))
Examples
> ~>(%mean.[%leaf "fuse-loop"] !!)
####
!! crash
++tail
Get tail
Produces the tail of a cell.
Accepts
A cell.
Produces
A noun.
Source
++ tail |*(^ ,:+<+)
Examples
> (tail [1 2])
2
> (tail [[1 1] 2])
2
> (tail "hello")
"ello"
++test
Test for equality
Checks if a
and b
are equal, producing a flag.
Accepts
a
is a noun.
b
is a noun.
Produces
A flag.
Source
++ test |=(^ =(+<- +<+))
Examples
> (test 1 1)
%.y
> (test [2 0] 2)
%.n
> (test "hello" 'hello')
%.n
> (test "hello" ['h' 'e' 'l' 'l' 'o' ~])
%.y