on 232f7dc help sign in
elk/src/AST/Kernel.hs
88 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 Elm.Name as N
18-- DATA
21data Data =
22 Data
23 { _client :: Content
24 , _server :: Maybe Content
25 }
29-- CONTENT
32data Content =
33 Content
34 { _imports :: [(N.Name, N.Name)]
35 , _chunks :: [Chunk]
36 }
40-- CHUNKS
43data Chunk
44 = JS BS.ByteString
45 | Var N.Name N.Name
46 | Field N.Name
47 | Debug
48 | Prod
52-- BINARY
55instance Binary Data where
56 put (Data a b) =
57 put a >> put b
59 get =
60 liftM2 Data get get
63instance Binary Content where
64 put (Content a b) =
65 put a >> put b
67 get =
68 liftM2 Content get get
71instance Binary Chunk where
72 put chunk =
73 case chunk of
74 JS a -> putWord8 0 >> put a
75 Var a b -> putWord8 1 >> put a >> put b
76 Field a -> putWord8 2 >> put a
77 Debug -> putWord8 3
78 Prod -> putWord8 4
80 get =
81 do word <- getWord8
82 case word of
83 0 -> liftM JS get
84 1 -> liftM2 Var get get
85 2 -> liftM Field get
86 3 -> return Debug
87 4 -> return Prod
88 _ -> error "problem deserializing Parse.Kernel.Chunk"