on 087045f help sign in
elk/src/AST/Kernel.hs
98 lines 1.4 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
13import qualified Data.Text as Text
15import qualified AST.Module.Name as ModuleName
19-- DATA
22data Data =
23 Data
24 { _client :: Content
25 , _server :: Maybe Content
26 }
30-- CONTENT
33data Content =
34 Content
35 { _imports :: [(ModuleName.Raw, Text.Text)]
36 , _chunks :: [Chunk]
37 }
41-- CHUNKS
44data Chunk
45 = JS BS.ByteString
46 | Var ModuleName.Raw Text.Text
47 | Field Text.Text
48 | Debug
49 | Prod
53-- BINARY
56instance Binary Data where
57 put (Data client server) =
58 put client >> put server
60 get =
61 liftM2 Data get get
64instance Binary Content where
65 put (Content imports chunks) =
66 put imports >> put chunks
68 get =
69 liftM2 Content get get
72instance Binary Chunk where
73 put chunk =
74 case chunk of
75 JS bytes ->
76 putWord8 0 >> put bytes
78 Var home name ->
79 putWord8 1 >> put home >> put name
81 Field field ->
82 putWord8 2 >> put field
84 Debug ->
85 putWord8 3
87 Prod ->
88 putWord8 4
90 get =
91 do word <- getWord8
92 case word of
93 0 -> liftM JS get
94 1 -> liftM2 Var get get
95 2 -> liftM Field get
96 3 -> return Debug
97 4 -> return Prod
98 _ -> error "problem deserializing Parse.Kernel.Chunk"