on dfaef18 help sign in
elk/src/AST/Kernel.hs
89 lines 1.3 kB history raw
1{-# OPTIONS_GHC -Wall #-}
2module AST.Kernel
3 ( Data(..)
4 , Content(..)
5 , Chunk(..)
6 )
7 where
10import Control.Monad (liftM, liftM2)
11import Data.Binary
12import qualified Data.ByteString as BS
14import qualified AST.Module.Name as ModuleName
15import qualified Elm.Name as N
19-- DATA
22data Data =
23 Data
24 { _client :: Content
25 , _server :: Maybe Content
26 }
30-- CONTENT
33data Content =
34 Content
35 { _imports :: [(N.Name, N.Name)]
36 , _chunks :: [Chunk]
37 }
41-- CHUNKS
44data Chunk
45 = JS BS.ByteString
46 | Var N.Name N.Name
47 | Field N.Name
48 | Debug
49 | Prod
53-- BINARY
56instance Binary Data where
57 put (Data a b) =
58 put a >> put b
60 get =
61 liftM2 Data get get
64instance Binary Content where
65 put (Content a b) =
66 put a >> put b
68 get =
69 liftM2 Content get get
72instance Binary Chunk where
73 put chunk =
74 case chunk of
75 JS a -> putWord8 0 >> put a
76 Var a b -> putWord8 1 >> put a >> put b
77 Field a -> putWord8 2 >> put a
78 Debug -> putWord8 3
79 Prod -> putWord8 4
81 get =
82 do word <- getWord8
83 case word of
84 0 -> liftM JS get
85 1 -> liftM2 Var get get
86 2 -> liftM Field get
87 3 -> return Debug
88 4 -> return Prod
89 _ -> error "problem deserializing Parse.Kernel.Chunk"