Initial commit + basic Expr impl

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

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