@@ -2,16 +2,14 @@
2module Transform.Expression (crawlLet, checkPorts) where
2module Transform.Expression (crawlLet, checkPorts) where
4import Control.Applicative ((<$>),(<*>))
4import Control.Applicative ((<$>),(<*>))
5−import Data.Traversable (traverse)
6import SourceSyntax.Expression
5import SourceSyntax.Expression
7import SourceSyntax.Location
6import SourceSyntax.Location
8import qualified SourceSyntax.Type as ST
7import qualified SourceSyntax.Type as ST
9−import qualified Type.Type as TT
11crawlLet :: ([def] -> Either a [def']) -> LExpr' def -> Either a (LExpr' def')
9crawlLet :: ([def] -> Either a [def']) -> LExpr' def -> Either a (LExpr' def')
12−crawlLet = crawl (\_ _ _ -> return ()) (\_ _ -> return ())
10+crawlLet = crawl (\_ _ -> return ()) (\_ _ -> return ())
14−checkPorts :: (String -> ST.Type -> TT.Variable -> Either a ())
12+checkPorts :: (String -> ST.Type -> Either a ())
15 -> (String -> ST.Type -> Either a ())
13 -> (String -> ST.Type -> Either a ())
17 -> Either a LExpr
15 -> Either a LExpr
@@ -22,7 +20,7 @@ checkPorts inCheck outCheck expr =
22 do _ <- checkPorts inCheck outCheck body
20 do _ <- checkPorts inCheck outCheck body
23 return def
21 return def
25−crawl :: (String -> ST.Type -> TT.Variable -> Either a ())
23+crawl :: (String -> ST.Type -> Either a ())
26 -> (String -> ST.Type -> Either a ())
24 -> (String -> ST.Type -> Either a ())
27 -> ([def] -> Either a [def'])
25 -> ([def] -> Either a [def'])
28 -> LExpr' def
26 -> LExpr' def
@@ -49,9 +47,9 @@ crawl portInCheck portOutCheck defsTransform = go
49 Record fields -> Record <$> mapM (\(k,v) -> (,) k <$> go v) fields
47 Record fields -> Record <$> mapM (\(k,v) -> (,) k <$> go v) fields
50 Markdown uid md es -> Markdown uid md <$> mapM go es
48 Markdown uid md es -> Markdown uid md <$> mapM go es
51 Let defs body -> Let <$> defsTransform defs <*> go body
49 Let defs body -> Let <$> defsTransform defs <*> go body
52− PortIn name st tt handler ->
50+ PortIn name st ->
53− do portInCheck name st tt
51+ do portInCheck name st
54− PortIn name st tt <$> traverse go handler
52+ return $ PortIn name st
55 PortOut name st signal ->
53 PortOut name st signal ->
56 do portOutCheck name st
54 do portOutCheck name st
57 PortOut name st <$> go signal
55 PortOut name st <$> go signal