An Elm-inspired language that transpiles to TypeScript
Usage
npx @eeue56/derw
To get started:
Start a package via `derw init`
Compile via `derw compile`
Or compile and test via `derw test`
You can run the derw compiler via npx. You must provide files via --files or be in a package directory.
npx @eeue56/derw
Let\'s write some Derw code
To get started:
Provide entry files via --files
Or run me without args inside a package directory
--files [string...]: Filenames to be given
--test : Test the project
--target ts | js | derw: Target TS, JS or Derw output
--output string: Output directory name
--verify : Run typescript compiler on generated files to ensure valid output
--debug : Show a parsed object tree
--only string: Only show a particular object
--run : Should be run via ts-node/node
--format : Format the files given in-place
--quiet : Keep it short and sweet
-h, --help : This help text
Example
You can find a bunch of examples in examples, along with the Typescript they generate. But the general gist is: Elm-compatible syntax where possible.
type Result a b
= Err { error: a }
| Ok { value: b }
asIs : Result a b -> Result a b
asIs result =
case result of
Err { error } -> Err { error }
Ok { value } -> Ok { value }
type Result a b
= Err { error: a }
| Ok { value: b }
Type variables
type Thing a = Thing a
Type aliases
type User =
{ name: string }
Object literals
user: User
user = { name: string }
Imports
import List
import Result exposing ( map )
import something as banana
Exports
exposing ( map )
Let statements
sayHiTo : User -> string
sayHiTo user =
let
name = user.name
in
"Hello " + name
sayHelloTo : User -> string
sayHelloTo user =
let
getName: User -> string
getName user = user.name
in
"Hello" + getName user
If statements
type Animal = Animal { age: number }
sayHiTo : Animal -> string
sayHiTo animal =
if animal.age == 1 of
"Hello little one!"
else
"You're old"
Case..of
type Animal = Dog | Cat
sayHiTo : Animal -> string
sayHiTo animal =
case animal of
Dog -> "Hi dog!"
Cat -> "Hi cat!"
Destructing in case..of
type User = User { name: string }
sayHiTo : User -> string
sayHiTo user =
case user of
User { name } -> "Hi " + name + !"
strings in case..of
defaults in case..of
sayHiTo : string -> string
sayHiTo name =
case name of
"Noah" -> "Hi " + name + !"
default: "I don't know you"
List destructing
sayHiTo : List number -> string
sayHiTo xs =
case xs of
[] -> "Empty"
x::ys -> "Hello " + x + (sayHiTo ys)
Constructing union types
type User = User { name: string }
noah = User { name: "Noah" }
Errors on type name collison
The name `Person` has been used for different things.
8 - 10:
```
type Person =
Person { name: string }
```
11 - 14:
```
type alias Person = {
name: string
}
```
Errors on function name collison
The name `isTrue` has been used for different things.
0 - 3:
```
isTrue: boolean -> boolean
isTrue x =
x == true
```
4 - 7:
```
isTrue: boolean -> boolean
isTrue x =
x != true
```
Some form of basic type errors
Failed to parse examples/errors/mismatching_types.derw due to:
Error on lines 0 - 3
Expected `boolean` but got `number` in the body of the function:
```
isTrue: boolean -> boolean
isTrue x =
1 + 2
```
Error on lines 4 - 7
Expected `List string` but got `List number`:
```
names: List string
names =
[1..2]
```
All top level consts or functions must have type definitions
Format strings ``
No need for module names in the module file itself. Use exposing instead
Editor language support
Currently VSCode syntax highlighting is supported by this extension: https://github.com/eeue56/derw-syntax. It is not on the marketplace because Microsoft account creation was down when I tried.
derw which means oak. Oak is one of the native trees in Wales, famous for it's long life, tall stature, and hard, good quality wood. An English speaker might pronounce it as "deh-ru".
An Elm-inspired language that transpiles to TypeScript
We found that @eeue56/derw demonstrated a not healthy version release cadence and project activity because the last version was released a year ago.It has 1 open source maintainer collaborating on the project.
Package last updated on 31 Dec 2021
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
TC39 met in Seattle and advanced 9 JavaScript proposals, including three to Stage 4, introducing new features and enhancements for a future ECMAScript release.
React's CRA deprecation announcement sparked community criticism over framework recommendations, leading to quick updates acknowledging build tools like Vite as valid alternatives.