Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

@eeue56/derw

Package Overview
Dependencies
Maintainers
1
Versions
9
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@eeue56/derw

An Elm-inspired language that transpiles to TypeScript

  • 0.0.3-0
  • Source
  • npm
  • Socket score

Version published
Weekly downloads
2
decreased by-87.5%
Maintainers
1
Weekly downloads
 
Created
Source

derw

An Elm-inspired language that transpiles to TypeScript

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 }

Roadmap

0.0.1 alpha

  • Arrays [ ], [ 1, 2, 3 ], [ [ 1, 2, 3 ], [ 3, 2, 1 ] ]
  • Booleans true, false
  • Boolean equality 1 < 2, 1 <= 2, 1 == 2, 1 != 2, 1 > 2, 1 >= 2
  • Boolean operations true && false, not true, true || false
  • Strings "", "hello world"
  • Format strings ``, `Hello ${name}`
  • Numbers -1, 0, 1, -1.1, 1.1
  • Addition 1 + 2, "Hello" + name
  • Subtraction 2 - 1
  • Multiplication 2 * 1
  • Division 2 / 1
  • Pipe [1, 2, 3] |> List.fold add, List.fold add <| [1, 2, 3]
  • Compose >>, <<
  • Constants hello = "hello world"
  • Function definitions
  • Lists [ 1, 2, 3 ], [ "hello", "world" ]
  • List ranges [ 1..5 ], [ start..end ]
add : number -> number -> number
add x y = x + y
  • Function calls
three = add 1 2
  • Module references
three = List.map identity [ 1, 2, 3 ]
  • Union types
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)
  • 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 + !"
  • 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" }
  • lambdas \x -> x + 1, \x y -> x + y
  • Typescript output
  • Javscript output
  • Module resolution
  • CLI
  • Type checking
  • Syntax highlighting for editors

1.0.0

  • An automatic formatter with no options
  • A standard library
  • Support for Coed
  • Testing support via Bach
  • Benchmarking support via Mainc

Divergence from Elm

  • 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 extenstion: https://github.com/eeue56/derw-syntax. It is not on the marketplace because Microsoft account creation was down when I tried.

Instead, you can do:

git clone https://github.com/eeue56/derw-syntax
cp -r derw-syntax ~/.vscode/extensions/derw-syntax-0.0.1

Name

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.

Keywords

FAQs

Package last updated on 13 Dec 2021

Did you know?

Socket

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.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc