Merged branch master
authorpimjager <pim@pimjager.nl>
Mon, 29 Feb 2016 12:45:20 +0000 (13:45 +0100)
committerpimjager <pim@pimjager.nl>
Mon, 29 Feb 2016 12:45:20 +0000 (13:45 +0100)
1  2 
src/main.prj
src/parse.icl

diff --combined src/main.prj
@@@ -31,7 -31,6 +31,6 @@@ Globa
        Link
                LinkMethod:     Static
                GenerateRelocations:    False
-               GenerateSymbolTable:    False
                GenerateLinkMap:        False
                LinkResources:  False
                ResourceSource: 
@@@ -422,7 -421,7 +421,7 @@@ OtherModule
                        Fusion: False
        Module
                Name:   Control.Applicative
-               Dir:    {Application}/lib/iTasks-SDK/Dependencies/clean-platform/src/libraries/OS-Independent
+               Dir:    {Application}/lib/iTasks-SDK/Dependencies/Platform/OS-Independent
                Compiler
                        NeverMemoryProfile:     False
                        NeverTimeProfile:       False
                        Fusion: False
        Module
                Name:   Control.Monad
-               Dir:    {Application}/lib/iTasks-SDK/Dependencies/clean-platform/src/libraries/OS-Independent
+               Dir:    {Application}/lib/iTasks-SDK/Dependencies/Platform/OS-Independent
                Compiler
                        NeverMemoryProfile:     False
                        NeverTimeProfile:       False
                        Fusion: False
        Module
                Name:   Data.Either
-               Dir:    {Application}/lib/iTasks-SDK/Dependencies/clean-platform/src/libraries/OS-Independent
+               Dir:    {Application}/lib/iTasks-SDK/Dependencies/Platform/OS-Independent
                Compiler
                        NeverMemoryProfile:     False
                        NeverTimeProfile:       False
                        Fusion: False
        Module
                Name:   Data.Foldable
-               Dir:    {Application}/lib/iTasks-SDK/Dependencies/clean-platform/src/libraries/OS-Independent
+               Dir:    {Application}/lib/iTasks-SDK/Dependencies/Platform/OS-Independent
                Compiler
                        NeverMemoryProfile:     False
                        NeverTimeProfile:       False
                        Fusion: False
        Module
                Name:   Data.Func
-               Dir:    {Application}/lib/iTasks-SDK/Dependencies/clean-platform/src/libraries/OS-Independent
+               Dir:    {Application}/lib/iTasks-SDK/Dependencies/Platform/OS-Independent
                Compiler
                        NeverMemoryProfile:     False
                        NeverTimeProfile:       False
                        Fusion: False
        Module
                Name:   Data.Functor
-               Dir:    {Application}/lib/iTasks-SDK/Dependencies/clean-platform/src/libraries/OS-Independent
+               Dir:    {Application}/lib/iTasks-SDK/Dependencies/Platform/OS-Independent
                Compiler
                        NeverMemoryProfile:     False
                        NeverTimeProfile:       False
                        Fusion: False
        Module
                Name:   Data.List
-               Dir:    {Application}/lib/iTasks-SDK/Dependencies/clean-platform/src/libraries/OS-Independent
+               Dir:    {Application}/lib/iTasks-SDK/Dependencies/Platform/OS-Independent
                Compiler
                        NeverMemoryProfile:     False
                        NeverTimeProfile:       False
                        Fusion: False
        Module
                Name:   Data.Map
-               Dir:    {Application}/lib/iTasks-SDK/Dependencies/clean-platform/src/libraries/OS-Independent
+               Dir:    {Application}/lib/iTasks-SDK/Dependencies/Platform/OS-Independent
                Compiler
                        NeverMemoryProfile:     False
                        NeverTimeProfile:       False
                        Fusion: False
        Module
                Name:   Data.Maybe
-               Dir:    {Application}/lib/iTasks-SDK/Dependencies/clean-platform/src/libraries/OS-Independent
+               Dir:    {Application}/lib/iTasks-SDK/Dependencies/Platform/OS-Independent
                Compiler
                        NeverMemoryProfile:     False
                        NeverTimeProfile:       False
                        Fusion: False
        Module
                Name:   Data.Monoid
-               Dir:    {Application}/lib/iTasks-SDK/Dependencies/clean-platform/src/libraries/OS-Independent
+               Dir:    {Application}/lib/iTasks-SDK/Dependencies/Platform/OS-Independent
                Compiler
                        NeverMemoryProfile:     False
                        NeverTimeProfile:       False
                        Fusion: False
        Module
                Name:   Data.Set
-               Dir:    {Application}/lib/iTasks-SDK/Dependencies/clean-platform/src/libraries/OS-Independent
+               Dir:    {Application}/lib/iTasks-SDK/Dependencies/Platform/OS-Independent
                Compiler
                        NeverMemoryProfile:     False
                        NeverTimeProfile:       False
                        Fusion: False
        Module
                Name:   Data.Traversable
-               Dir:    {Application}/lib/iTasks-SDK/Dependencies/clean-platform/src/libraries/OS-Independent
+               Dir:    {Application}/lib/iTasks-SDK/Dependencies/Platform/OS-Independent
                Compiler
                        NeverMemoryProfile:     False
                        NeverTimeProfile:       False
                        Fusion: False
        Module
                Name:   Data.Void
-               Dir:    {Application}/lib/iTasks-SDK/Dependencies/clean-platform/src/libraries/OS-Independent
+               Dir:    {Application}/lib/iTasks-SDK/Dependencies/Platform/OS-Independent
                Compiler
                        NeverMemoryProfile:     False
                        NeverTimeProfile:       False
                        Fusion: False
        Module
                Name:   System.CommandLine
-               Dir:    {Application}/lib/iTasks-SDK/Dependencies/clean-platform/src/libraries/OS-Independent
+               Dir:    {Application}/lib/iTasks-SDK/Dependencies/Platform/OS-Independent
                Compiler
                        NeverMemoryProfile:     False
                        NeverTimeProfile:       False
                        Fusion: False
        Module
                Name:   System.IO
-               Dir:    {Application}/lib/iTasks-SDK/Dependencies/clean-platform/src/libraries/OS-Independent
+               Dir:    {Application}/lib/iTasks-SDK/Dependencies/Platform/OS-Independent
                Compiler
                        NeverMemoryProfile:     False
                        NeverTimeProfile:       False
                        Fusion: False
        Module
                Name:   System._Pointer
-               Dir:    {Application}/lib/iTasks-SDK/Dependencies/clean-platform/src/libraries/OS-Independent
+               Dir:    {Application}/lib/iTasks-SDK/Dependencies/Platform/OS-Independent
                Compiler
                        NeverMemoryProfile:     False
                        NeverTimeProfile:       False
                        Fusion: False
        Module
                Name:   Text
-               Dir:    {Application}/lib/iTasks-SDK/Dependencies/clean-platform/src/libraries/OS-Independent
+               Dir:    {Application}/lib/iTasks-SDK/Dependencies/Platform/OS-Independent
                Compiler
                        NeverMemoryProfile:     False
                        NeverTimeProfile:       False
                        Fusion: False
        Module
                Name:   Text.JSON
-               Dir:    {Application}/lib/iTasks-SDK/Dependencies/clean-platform/src/libraries/OS-Independent
+               Dir:    {Application}/lib/iTasks-SDK/Dependencies/Platform/OS-Independent
                Compiler
                        NeverMemoryProfile:     False
                        NeverTimeProfile:       False
                        Fusion: False
        Module
                Name:   Text.PPrint
-               Dir:    {Application}/lib/iTasks-SDK/Dependencies/clean-platform/src/libraries/OS-Independent
+               Dir:    {Application}/lib/iTasks-SDK/Dependencies/Platform/OS-Independent
                Compiler
                        NeverMemoryProfile:     False
                        NeverTimeProfile:       False
                        ReadableABC:    False
                        ReuseUniqueNodes:       True
                        Fusion: False
 +      Module
 +              Name:   StdMaybe
 +              Dir:    {Application}/lib/iTasks-SDK/Dependencies/clean-platform/src/libraries/OS-Independent/Deprecated/StdLib
 +              Compiler
 +                      NeverMemoryProfile:     False
 +                      NeverTimeProfile:       False
 +                      StrictnessAnalysis:     True
 +                      ListTypes:      StrictExportTypes
 +                      ListAttributes: True
 +                      Warnings:       True
 +                      Verbose:        True
 +                      ReadableABC:    False
 +                      ReuseUniqueNodes:       True
 +                      Fusion: False
        Module
                Name:   System.OS
-               Dir:    {Application}/lib/iTasks-SDK/Dependencies/clean-platform/src/libraries/OS-Mac
+               Dir:    {Application}/lib/iTasks-SDK/Dependencies/Platform/OS-Linux-64
                Compiler
                        NeverMemoryProfile:     False
                        NeverTimeProfile:       False
                        ReadableABC:    False
                        ReuseUniqueNodes:       True
                        Fusion: False
 +      Module
 +              Name:   GenPrint
 +              Dir:    {Application}/lib/iTasks-SDK/Patches/Generics
 +              Compiler
 +                      NeverMemoryProfile:     False
 +                      NeverTimeProfile:       False
 +                      StrictnessAnalysis:     True
 +                      ListTypes:      StrictExportTypes
 +                      ListAttributes: True
 +                      Warnings:       True
 +                      Verbose:        True
 +                      ReadableABC:    False
 +                      ReuseUniqueNodes:       True
 +                      Fusion: False
        Module
                Name:   StdGeneric
                Dir:    {Application}/lib/iTasks-SDK/Patches/StdEnv
diff --combined src/parse.icl
@@@ -12,7 -12,6 +12,7 @@@ import Control.Applicativ
  import Data.Func
  from Data.List import intercalate, replicate, instance Functor []
  from Text import class Text(concat), instance Text String
 +import GenPrint
  
  import yard
  import lex
@@@ -54,8 -53,8 +54,8 @@@ parseStmt = parseIfStmt <|> parseWhileS
                parseIfStmt = liftM3 IfStmt
                        (satTok IfToken *> parseBBraces parseExpr)
                        (parseBlock <|> parseOneLine)
-                       (optional (satTok ElseToken *> (parseBlock <|> parseOneLine)
-                               ) >>= pure o fromMaybe [])
+                       (liftM (fromMaybe []) 
+                               (optional (satTok ElseToken *> (parseBlock<|> parseOneLine))))
  
                parseWhileStmt :: Parser Token Stmt
                parseWhileStmt = satTok WhileToken *> 
@@@ -74,39 -73,39 +74,39 @@@ parseBBraces p = satTok BraceOpenToken 
  parseBCBraces :: (Parser Token a) -> Parser Token a
  parseBCBraces p = satTok CBraceOpenToken *> p <* satTok CBraceCloseToken
  
+ parseBSqBraces :: (Parser Token a) -> Parser Token a
+ parseBSqBraces p = satTok SquareOpenToken *> p <* satTok SquareCloseToken
  parseFunType :: Parser Token FunType
- parseFunType = satTok DoubleColonToken *> 
-       (parseInOutType <|> (parseVoidOrType >>= \t->pure $ FunType [] t))
+ parseFunType = satTok DoubleColonToken *>
+       (parseInOutType <|> (liftM (FunType []) parseVoidOrType))
        where
                parseInOutType :: Parser Token FunType
-               parseInOutType = some parseType <* satTok ArrowToken
-                       >>= \intypes-> parseVoidOrType
-                       >>= \outtypes->pure $ FunType intypes outtypes
+               parseInOutType = liftM2 FunType 
+                       (some parseType <* satTok ArrowToken) parseVoidOrType
  
                parseVoidOrType :: Parser Token (Maybe Type)
                parseVoidOrType = (satTok VoidToken *> pure Nothing) <|> 
-                       (parseType >>= \type->pure $ Just type)
+                       (liftM Just parseType)
  
  parseVarDecl :: Parser Token VarDecl
- parseVarDecl = 
+ parseVarDecl = liftM3 VarDecl
        (parseType <|> trans1 VarToken VarType )
-       >>= \t->parseIdent <* satTok AssignmentToken
-       >>= \i->parseExpr <* satTok SColonToken
-       >>= \e->pure $ VarDecl i t e
+       (parseIdent <* satTok AssignmentToken)
+       (parseExpr <* satTok SColonToken)
  
  parseType :: Parser Token Type
  parseType = 
        trans1 IntTypeToken IntType <|>
        trans1 CharTypeToken CharType <|>
        trans1 BoolTypeToken BoolType <|>
-       (satTok SquareOpenToken *> parseType <* satTok SquareCloseToken 
-               >>= \t.pure $ ListType t) <|>
-       (satTok BraceOpenToken *> parseType <* satTok CommaToken 
-               >>= \t1->parseType <* satTok BraceCloseToken 
-               >>= \t2->pure $ TupleType t1 t2) <|>
-       (parseIdent >>= \e.pure $ IdType e) <|>
-       empty
+       (liftM ListType (parseBSqBraces parseType)) <|>
+       (liftM2 TupleType 
+               (satTok BraceOpenToken *> parseType <* satTok CommaToken)
+               (parseType <* satTok BraceCloseToken)) <|>
+       (liftM IdType parseIdent)
  
+ //TODO hieronder omzetten naar liftm notatie
  parseExpr :: Parser Token Expr
  parseExpr = //Operators in order of binding strength
        parseOpR (trans1 ColonToken BiCons) $
@@@ -173,9 -172,14 +173,15 @@@ trans2 t f = satTok t >>= \(_, r).pure 
  trans1 :: TokenValue a -> Parser Token a
  trans1 t r = trans2 t $ const r
  
 +derive gPrint TokenValue
+ derive gEq TokenValue
  satTok :: TokenValue -> Parser Token Token
- satTok t = top >>= \tok=:(pos, tv) -> if (t === tok) (return tok) (fail <?> (printToString t, pos))
 -satTok t = satisfy $ eq t
++satTok t = top >>= \tok=:(pos, tv) -> if (eq t tok) (return tok) (fail <?> (printToString t, pos))
+       where
+               eq (IdentToken _) (_, IdentToken _) = True
+               eq (NumberToken _) (_, NumberToken _) = True
+               eq (CharToken _) (_, CharToken _) = True
+               eq x (_, y) = gEq {|*|} x y
  
  parseSepList :: TokenValue (Parser Token a) -> Parser Token [a]
  parseSepList sep p = 
@@@ -220,7 -224,7 +226,7 @@@ printStatements [s:ss] i = (case s o
                printCodeBlock [] _ = ["{}"]
                printCodeBlock [x] i = ["\n":printStatements [x] (i+1)]
                printCodeBlock x i =
-                       ["{\n":printStatements x (i+1)] ++ indent i ["}"]
+                       ["{\n":printStatements x (i+1)] ++ indent i ["}\n"]
  
                indent :: Int [String] -> [String]
                indent i rest = replicate i "\t" ++ rest
@@@ -230,7 -234,7 +236,7 @@@ instance print FunType wher
                [if (isEmpty at) "" "->":maybe ["Void"] print rt]
  
  instance print VarDecl where
-       print (VarDecl i t e) = print t ++ [" ":i:"=":print e] ++ [";"]
+       print (VarDecl t i e) = print t ++ [" ":i:"=":print e] ++ [";"]
  
  instance print Type where
        print (TupleType t1 t2) = ["(":print t1] ++ [",":print t2] ++ [")"]