ruler-core-1.0: examples/Alias.rul
{
{-# LANGUAGE BangPatterns #-}
module Alias where
import Control.Monad.Error
}
type ListX : [X]
data X
con C
itf X
visit v
inh ast :: X
syn x :: Int
datasem X
clause C
lhs.x = 1
itf ListX
visit v
inh ast :: ListX
syn x :: Int
datasem ListX
clause Cons
invoke v of hd
invoke v of tl
lhs.x = hd.x + tl.x
clause Nil
lhs.x = 0
{
test :: ListX -> IO Int
test xs = do
let inh = Inh_ListX_v { ast_Inh_ListX = xs }
syn <- invoke_ListX_v dnt_ListX inh
let x = x_Syn_ListX syn
return x
main :: IO ()
main = do let list = [X_C,X_C,X_C]
x <- test list
putStrLn $ show x
}