aboutsummaryrefslogtreecommitdiff
path: root/example.snug
diff options
context:
space:
mode:
authorCamil Staps2023-02-02 14:39:41 +0100
committerCamil Staps2023-02-02 14:39:41 +0100
commitc1c043ef9aab2cbb02f4eba46c15d2d1fbb87550 (patch)
treefcc742d10e3eadc656454e2f961b91f4060ba771 /example.snug
parentImplement basic uses of locals (diff)
Add basic vim support
Diffstat (limited to 'example.snug')
-rw-r--r--example.snug79
1 files changed, 79 insertions, 0 deletions
diff --git a/example.snug b/example.snug
new file mode 100644
index 0000000..33d4dab
--- /dev/null
+++ b/example.snug
@@ -0,0 +1,79 @@
+(data Tuple (a b) (
+ (Tuple a b)))
+(data List (a) (
+ Nil
+ (Cons a (List a))))
+(type String (List Char))
+
+(data TypeIdent ((TI String)))
+(data TypeVarIdent ((TVI String)))
+(data ConstructorIdent ((CI String)))
+(data SymbolIdent ((SI String)))
+
+(data Type (
+ (Type TypeIdent)
+ (TypeVar TypeVarIdent)
+ (TypeApp Type Type)))
+
+(data ConstructorDef (
+ (ConstructorDef ConstructorIdent (List Type))))
+
+(data BasicValue (
+ (BVInt Int)
+ (BVChar Char)))
+
+(data Pattern (
+ Wildcard
+ (BasicValuePattern BasicValue)
+ (IdentPattern SymbolIdent)
+ (ConstructorPattern ConstructorIdent (List Pattern))))
+
+(data CaseAlternative (
+ (CaseAlternative Pattern Expression)))
+
+(data Expression (
+ (BasicValue BasicValue)
+ (Symbol SymbolIdent)
+ (Case Expression (List CaseAlternative))
+ (ExpApp Expression Expression)))
+
+(data Definition (
+ (DataDef TypeIdent (List TypeVarIdent) (List ConstructorDef))
+ (FunDef SymbolIdent (List (Tuple SymbolIdent Type)) Type Expression)))
+
+(fun list_ast () : Definition :
+ DataDef
+ (Cons 'L' (Cons 'i' (Cons 's' (Cons 't' Nil))))
+ (Cons (Cons 'a' Nil) Nil)
+ (Cons (ConstructorDef (Cons 'N' (Cons 'i' (Cons 'l' Nil))) Nil)
+ (Cons (ConstructorDef (Cons 'C' (Cons 'o' (Cons 'n' (Cons 's' Nil)))) (Cons (TypeVar (Cons 'a' Nil)) (Cons (TypeApp (Type (Cons 'L' (Cons 'i' (Cons 's' (Cons 't' Nil))))) (TypeVar (Cons 'a' Nil))) Nil)))
+ Nil)))
+(fun length_acc_ast () : Definition :
+ FunDef
+ (Cons 'l' (Cons 'e' (Cons 'n' (Cons 'g' (Cons 't' (Cons 'h' (Cons '_' (Cons 'a' (Cons 'c' (Cons 'c' Nil))))))))))
+ (Cons (Tuple (Cons 'n' Nil) (Type (Cons 'I' (Cons 'n' (Cons 't' Nil)))))
+ (Cons (Tuple (Cons 'x' (Cons 's' Nil)) (TypeApp (Type (Cons 'L' (Cons 'i' (Cons 's' (Cons 't' Nil))))) (TypeVar (Cons 'a' Nil))))
+ Nil))
+ (Type (Cons 'I' (Cons 'n' (Cons 't' Nil))))
+ (Case (Symbol (Cons 'x' (Cons 's' Nil)))
+ (Cons (CaseAlternative
+ (ConstructorPattern (Cons 'N' (Cons 'i' (Cons 'l' Nil))) Nil)
+ (Symbol (Cons 'n' Nil)))
+ (Cons (CaseAlternative
+ (ConstructorPattern (Cons 'C' (Cons 'o' (Cons 'n' (Cons 's' Nil)))) (Cons Wildcard (Cons (IdentPattern (Cons 'x' (Cons 's' Nil))) Nil)))
+ (ExpApp (ExpApp (Symbol (Cons 'l' (Cons 'e' (Cons 'n' (Cons 'g' (Cons 't' (Cons 'h' (Cons '_' (Cons 'a' (Cons 'c' (Cons 'c' Nil))))))))))) (ExpApp (ExpApp (Cons '+' Nil) (Cons 'n' Nil)) (BasicValue (BVInt 1)))) (Cons 'x' (Cons 's' Nil))))
+ Nil))))
+
+(#
+(fun length ((xs : List a)) : Int :
+ length_acc 0 xs)
+(fun length_acc ((n : Int) (xs : List a)) : Int :
+ case xs (
+ (Nil -> n)
+ (Cons _ xs -> length_acc (+ n 1) xs)))
+#)
+
+(fun testb ((x : Int) (y : Char)) : Tuple Int Char :
+ Tuple x y)
+(fun test () : Tuple Int Char :
+ testb 37 'a')