## 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, and`let`

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
```