make net predicate dynamic
authorDaniel Schwyn <danielschwyn@gmail.com>
Tue, 23 May 2017 08:14:20 +0000 (10:14 +0200)
committerDaniel Schwyn <schwyda@student.ethz.ch>
Tue, 13 Jun 2017 12:21:40 +0000 (14:21 +0200)
Signed-off-by: Daniel Schwyn <schwyda@student.ethz.ch>

tools/sockeye2/SockeyeBackendProlog.hs

index 5996bca..9fab04e 100644 (file)
@@ -22,7 +22,7 @@ import Data.Char
 import qualified SockeyeAST as AST
 
 compile :: AST.NetSpec -> String
-compile = generate
+compile ast = preamble ++ generate ast
 
 {- Code Generator -}
 class PrologGenerator a where
@@ -60,6 +60,11 @@ instance PrologGenerator AST.Addr where
     generate (AST.Addr addr) = show addr
 
 {- Helper functions -}
+preamble :: String
+preamble = let dynamicPredicates = ["net/2"]
+           in (unlines $ map f dynamicPredicates) ++ "\n"
+           where f arg = ":-" ++ predicate "dynamic" [arg] ++ "."
+
 predicate :: String -> [String] -> String
 predicate name args = name ++ (parens $ intercalate "," args)