Sockeye: Start implementation of net builder
[barrelfish] / tools / sockeye / SockeyeNetBuilder.hs
1 {-
2     SockeyeNetBuilder.hs: Decoding net builder for Sockeye
3
4     Part of Sockeye
5
6     Copyright (c) 2017, ETH Zurich.
7
8     All rights reserved.
9
10     This file is distributed under the terms in the attached LICENSE file.
11     If you do not find this file, copies can be found by writing to:
12     ETH Zurich D-INFK, CAB F.78, Universitaetstr. 6, CH-8092 Zurich,
13     Attn: Systems Group.
14 -}
15
16 {-# LANGUAGE MultiParamTypeClasses #-}
17 {-# LANGUAGE FlexibleInstances #-}
18 {-# LANGUAGE FlexibleContexts #-}
19
20 module SockeyeNetBuilder
21 ( sockeyeBuildNet ) where
22
23 import qualified Data.Map as Map
24
25 import qualified SockeyeAST as AST
26 import qualified SockeyeASTDecodingNet as NetAST
27
28 newtype CheckFailure = CheckFailure
29     { message :: String }
30
31 instance Show CheckFailure where
32     show f = unlines $ ["", message f]
33
34 sockeyeBuildNet :: AST.SockeyeSpec -> Either CheckFailure NetAST.NetSpec
35 sockeyeBuildNet ast = buildNet ast
36
37 class NetSource a b where
38     buildNet :: a -> Either CheckFailure b
39
40 instance NetSource AST.SockeyeSpec NetAST.NetSpec where
41     buildNet ast = do
42         let
43             rootInst = AST.ModuleInst
44                 { AST.nameSpace  = AST.SimpleIdent ""
45                 , AST.moduleName = "@root"
46                 , AST.arguments  = Map.empty
47                 , AST.inPortMap  = []
48                 , AST.outPortMap = []
49                 }
50         buildNet rootInst
51
52 instance NetSource AST.ModuleInst NetAST.NetSpec where
53     buildNet ast = Left $ CheckFailure "ModuleInst conversion not yet implemented"