Initial commit + basic Expr impl

This commit is contained in:
Danila Fedorin 2023-02-28 19:44:24 -08:00
commit 394fab8914
6 changed files with 178 additions and 0 deletions

10
.gitignore vendored Normal file
View File

@ -0,0 +1,10 @@
/bower_components/
/node_modules/
/.pulp-cache/
/output/
/generated-docs/
/.psc-package/
/.psc*
/.purs*
/.psa*
/.spago

108
packages.dhall Normal file
View File

@ -0,0 +1,108 @@
{-
Welcome to your new Dhall package-set!
Below are instructions for how to edit this file for most use
cases, so that you don't need to know Dhall to use it.
## Use Cases
Most will want to do one or both of these options:
1. Override/Patch a package's dependency
2. Add a package not already in the default package set
This file will continue to work whether you use one or both options.
Instructions for each option are explained below.
### Overriding/Patching a package
Purpose:
- Change a package's dependency to a newer/older release than the
default package set's release
- Use your own modified version of some dependency that may
include new API, changed API, removed API by
using your custom git repo of the library rather than
the package set's repo
Syntax:
where `entityName` is one of the following:
- dependencies
- repo
- version
-------------------------------
let upstream = --
in upstream
with packageName.entityName = "new value"
-------------------------------
Example:
-------------------------------
let upstream = --
in upstream
with halogen.version = "master"
with halogen.repo = "https://example.com/path/to/git/repo.git"
with halogen-vdom.version = "v4.0.0"
with halogen-vdom.dependencies = [ "extra-dependency" ] # halogen-vdom.dependencies
-------------------------------
### Additions
Purpose:
- Add packages that aren't already included in the default package set
Syntax:
where `<version>` is:
- a tag (i.e. "v4.0.0")
- a branch (i.e. "master")
- commit hash (i.e. "701f3e44aafb1a6459281714858fadf2c4c2a977")
-------------------------------
let upstream = --
in upstream
with new-package-name =
{ dependencies =
[ "dependency1"
, "dependency2"
]
, repo =
"https://example.com/path/to/git/repo.git"
, version =
"<version>"
}
-------------------------------
Example:
-------------------------------
let upstream = --
in upstream
with benchotron =
{ dependencies =
[ "arrays"
, "exists"
, "profunctor"
, "strings"
, "quickcheck"
, "lcg"
, "transformers"
, "foldable-traversable"
, "exceptions"
, "node-fs"
, "node-buffer"
, "node-readline"
, "datetime"
, "now"
]
, repo =
"https://github.com/hdgarrood/purescript-benchotron.git"
, version =
"v7.0.0"
}
-------------------------------
-}
let upstream =
https://github.com/purescript/package-sets/releases/download/psc-0.15.2-20220706/packages.dhall
sha256:7a24ebdbacb2bfa27b2fc6ce3da96f048093d64e54369965a2a7b5d9892b6031
in upstream
with logict.repo = "https://dev.danilafe.com/Everything-I-Know-About-Types/logict.git"
with logict.version = "24298710fa940bfcf2d272bc6d5c7417f2bfccfe"
with logict.dependencies = [ "control", "lists", "maybe", "prelude", "transformers", "tuples" ]

17
spago.dhall Normal file
View File

@ -0,0 +1,17 @@
{-
Welcome to a Spago project!
You can edit this file as you like.
Need help? See the following resources:
- Spago documentation: https://github.com/purescript/spago
- Dhall language tour: https://docs.dhall-lang.org/tutorials/Language-Tour.html
When creating a new Spago project, you can use
`spago init --no-comments` or `spago init -C`
to generate this file without the comments in this block.
-}
{ name = "bergamot"
, dependencies = [ "foldable-traversable", "lists", "logict", "prelude" ]
, packages = ./packages.dhall
, sources = [ "src/**/*.purs", "test/**/*.purs" ]
}

View File

@ -0,0 +1,31 @@
module Language.Bergamot.Syntax where
import Data.List (List)
import Data.Functor (class Functor, (<$>))
import Data.Eq (class Eq)
import Data.Traversable (class Traversable, sequence)
import Data.Foldable (class Foldable, foldr, foldl, foldMap)
import Data.Monoid ((<>), mempty)
data Expr v
= Var v
| Atom String (List (Expr v))
derive instance Eq v => Eq (Expr v)
derive instance Functor Expr
instance Foldable Expr where
foldr f b (Var x) = f x b
foldr f b (Atom _ xs) = foldr (\x b' -> foldr f b' x) b xs
foldl f b (Var x) = f b x
foldl f b (Atom _ xs) = foldl (foldl f) b xs
foldMap f (Var x) = f x
foldMap f (Atom _ xs) = foldl (<>) mempty (foldMap f <$> xs)
instance Traversable Expr where
sequence (Var f) = Var <$> f
sequence (Atom name fs) = Atom name <$> sequence (sequence <$> fs)
traverse f e = sequence (f <$> e)

6
src/Main.purs Normal file
View File

@ -0,0 +1,6 @@
module Main where
import Prelude
main :: Unit
main = unit

6
test/Main.purs Normal file
View File

@ -0,0 +1,6 @@
module Test.Main where
import Prelude
main :: Unit
main = unit