levy
[source] [example]An implementation of Paul Levy’s call-by-push-value language. The language has the following constructs:
- integers with arithmetical operations
*
,+
,-
` - booleans with conditional statements and comparison
=
,<
of integers - functions
- general recursion (fixpoint operator)
- call-by-push-value features:
return
,thunk
,force
, sequencing, andlet
binding
Call-by-push-value is very precise about what gets evaluated when and can express both call-by-value and call-by-name.
Example interaction
The file example.levy
defines a number of examples, including the factorial
function. You can load it and try it as follows:
$ -l ./levy.native example.levy
return (4) : F int
return (6) : F int
return (-2) : F int
return (5) : F int
return (1) : F int
<fun> : int -> F int
<fun> : int -> F int
<fun> : int -> F int
return (42) : F int
val x : U (F int) = <thunk>
return (1) : F int
return (64) : F int
return (64) : F int
val a : int = 5
val b : int = 15
val c : U (F int) = <thunk>
val fact : U int -> F int = <thunk>
return (5040) : F int
levy -- programming languages zoo
Type Ctrl-D to exit