feat: unix adaptor for elm called starmelon

Introduce starmelon, a program for executing elm functions with input
from files and writing the output back to files.

Support evaluating 4 types of values and 12 types of functions.
```elm
x : String
x : Bytes
x : VirtualDom.Node msg
x : Json.Encode.Value

f : String -> String
f : String -> Bytes
f : String -> VirtualDom.Node msg
f : String -> Json.Encode.Value
f : Bytes -> String
f : Bytes -> Bytes
f : Bytes -> VirtualDom.Node msg
f : Bytes -> Json.Encode.Value
f : Json.Encode.Value -> String
f : Json.Encode.Value -> Bytes
f : Json.Encode.Value -> VirtualDom.Node msg
f : Json.Encode.Value -> Json.Encode.Value
```

My target use case for starmelon is generating html files. It is nice
to be able to write parameterized framgents of markup in multiple
modules and then compose them into a final value. I also have in mind
attempting to replace helm (kubernetes pacakge manager) because I hate
how error prone its string based templating language is.
This commit is contained in:
YetAnotherMinion 2021-09-15 06:07:28 +01:00 committed by nobody
commit f7aff7585d
Signed by: GrocerPublishAgent
GPG key ID: D460CD54A9E3AB86
8 changed files with 1356 additions and 0 deletions

View file

@ -0,0 +1,11 @@
[package]
name = "single-page"
version = "0.1.0"
edition = "2018"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[lib]
crate-type = [ "dylib" ]
[dependencies]

View file

@ -0,0 +1,25 @@
{
"type": "application",
"source-directories": [
"src"
],
"elm-version": "0.19.1",
"dependencies": {
"direct": {
"elm/browser": "1.0.2",
"elm/core": "1.0.5",
"elm/html": "1.0.0",
"elm/svg": "1.0.1"
},
"indirect": {
"elm/json": "1.1.3",
"elm/time": "1.0.0",
"elm/url": "1.0.0",
"elm/virtual-dom": "1.0.2"
}
},
"test-dependencies": {
"direct": {},
"indirect": {}
}
}

View file

@ -0,0 +1,14 @@
module Foo.Main exposing (view)
import Html exposing (Html, div, text)
import Array exposing (Array)
type alias Model =
{ a : Int
, b : Array Int
}
view : Model -> Html msg
view model =
div []
[ text "Hello world" ]

View file

@ -0,0 +1,19 @@
module Main exposing (view, view2)
import Html exposing (Html, div, text)
import Svg exposing (Svg, svg)
import Array exposing (Array)
type alias Model =
{ a : Int
, b : Array Int
}
view2 : String -> Svg msg
view2 model =
svg [] []
view : String -> Html msg
view model =
div []
[ text <| "Hello world" ++ model ]

View file

@ -0,0 +1,6 @@
#![crate_type = "dylib"]
#[no_mangle]
pub fn foobar() -> i32 {
42
}

View file

@ -0,0 +1 @@
../../../../../target/debug/starmelon