Skip to content

Commit

Permalink
Reorder
Browse files Browse the repository at this point in the history
  • Loading branch information
chrisdone committed Dec 4, 2023
1 parent 6f1293a commit a485deb
Showing 1 changed file with 21 additions and 21 deletions.
42 changes: 21 additions & 21 deletions readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -37,27 +37,6 @@ main = do
Text.putStrLn name
```

### More formal description

* The language is a simply-typed lambda calculus, with Haskell syntax.
* Some primitives that can be polymorphic (but require immediately
applied type applications).
* Polymorphic primitives such as `id` require passing the type of the
argument as `id @Int 123`. You cannot define polymorphic lambdas of
your own. It's not full System-F.
* Recursion is not supported. Use `Fun.fix`.
* It will support type-classes (for equality, dictionaries, etc), but
the dictionaries must be explicitly supplied. You can't define
classes, or data types, of your own.
* The types and functions available lean directly on the host language
(Haskell) and are either directly lifted, or a simplified layer over
the original things.
* There is presently no type inference (but I will add it). All
parameters of lambdas, or do-notation let bindings, must have their
type declared via a pattern signature: `\(x :: Int) -> x`
* Globals of any kind must be fully qualified (`Main.foo` and
`Text.putstrLn`), including the current module.

### Design philosophy

Turtle, Shelly, shell-conduit and Shh are "do shell scripting in
Expand Down Expand Up @@ -95,6 +74,27 @@ The other design decisions are:
One exception to this rule is avoiding `type String`. Sorry, it's hard
to justify when `Text` is established.

### More formal description

* The language is a simply-typed lambda calculus, with Haskell syntax.
* Some primitives that can be polymorphic (but require immediately
applied type applications).
* Polymorphic primitives such as `id` require passing the type of the
argument as `id @Int 123`. You cannot define polymorphic lambdas of
your own. It's not full System-F.
* Recursion is not supported. Use `Fun.fix`.
* It will support type-classes (for equality, dictionaries, etc), but
the dictionaries must be explicitly supplied. You can't define
classes, or data types, of your own.
* The types and functions available lean directly on the host language
(Haskell) and are either directly lifted, or a simplified layer over
the original things.
* There is presently no type inference (but I will add it). All
parameters of lambdas, or do-notation let bindings, must have their
type declared via a pattern signature: `\(x :: Int) -> x`
* Globals of any kind must be fully qualified (`Main.foo` and
`Text.putstrLn`), including the current module.

## Instructions

### Running
Expand Down

0 comments on commit a485deb

Please sign in to comment.