1{-# OPTIONS_GHC -fwarn-incomplete-patterns -Werror #-}
3{-| Binary instances for the core datatypes -}
4module Idris.Core.Binary where
7import Data.Vector.Binary
8import qualified Data.Text as T
12instance Binary ErrorReportPart where
13 put (TextPart msg) = do putWord8 0 ; put msg
14 put (NamePart n) = do putWord8 1 ; put n
15 put (TermPart t) = do putWord8 2 ; put t
16 put (SubReport ps) = do putWord8 3 ; put ps
18 get = do i <- getWord8
20 0 -> fmap TextPart get
21 1 -> fmap NamePart get
22 2 -> fmap TermPart get
23 3 -> fmap SubReport get
24 _ -> error "Corrupted binary data for ErrorReportPart"
26instance Binary a => Binary (Err' a) where
27 put (Msg str) = do putWord8 0
29 put (InternalMsg str) = do putWord8 1
31 put (CantUnify x y z e ctxt i) = do putWord8 2
38 put (InfiniteUnify n t ctxt) = do putWord8 3
42 put (CantConvert x y ctxt) = do putWord8 4
46 put (CantSolveGoal x ctxt) = do putWord8 5
49 put (UnifyScope n1 n2 x ctxt) = do putWord8 6
54 put (CantInferType str) = do putWord8 7
56 put (NonFunctionType t1 t2) = do putWord8 8
59 put (NotEquality t1 t2) = do putWord8 9
62 put (TooManyArguments n) = do putWord8 10
64 put (CantIntroduce t) = do putWord8 11
66 put (NoSuchVariable n) = do putWord8 12
68 put (NoTypeDecl n) = do putWord8 13
70 put (NotInjective x y z) = do putWord8 14
74 put (CantResolve t) = do putWord8 15
76 put (CantResolveAlts ns) = do putWord8 16
78 put (IncompleteTerm t) = do putWord8 17
80 put UniverseError = putWord8 18
81 put (UniqueError u n) = do putWord8 19
84 put (UniqueKindError u n) = do putWord8 20
87 put ProgramLineComment = putWord8 21
88 put (Inaccessible n) = do putWord8 22
90 put (NonCollapsiblePostulate n) = do putWord8 23
92 put (AlreadyDefined n) = do putWord8 24
94 put (ProofSearchFail e) = do putWord8 25
96 put (NoRewriting t) = do putWord8 26
98 put (At fc e) = do putWord8 27
101 put (Elaborating str n e) = do putWord8 28
105 put (ElaboratingArg n1 n2 ns e) = do putWord8 29
110 put (ProviderError str) = do putWord8 30
112 put (LoadingFailed str e) = do putWord8 31
115 put (ReflectionError parts e) = do putWord8 32
118 put (ReflectionFailed str e) = do putWord8 33
121 put (WithFnType t) = do putWord8 34
123 put (CantMatch t) = do putWord8 35
126 get = do i <- getWord8
129 1 -> fmap InternalMsg get
130 2 -> do x <- get ; y <- get ; z <- get ; e <- get ; ctxt <- get ; i <- get
131 return $ CantUnify x y z e ctxt i
132 3 -> do x <- get ; y <- get ; z <- get
133 return $ InfiniteUnify x y z
134 4 -> do x <- get ; y <- get ; z <- get
135 return $ CantConvert x y z
136 5 -> do x <- get ; y <- get
137 return $ CantSolveGoal x y
138 6 -> do w <- get ; x <- get ; y <- get ; z <- get
139 return $ UnifyScope w x y z
140 7 -> fmap CantInferType get
141 8 -> do x <- get ; y <- get
142 return $ NonFunctionType x y
143 9 -> do x <- get ; y <- get
144 return $ NotEquality x y
145 10 -> fmap TooManyArguments get
146 11 -> fmap CantIntroduce get
147 12 -> fmap NoSuchVariable get
148 13 -> fmap NoTypeDecl get
149 14 -> do x <- get ; y <- get ; z <- get
150 return $ NotInjective x y z
151 15 -> fmap CantResolve get
152 16 -> fmap CantResolveAlts get
153 17 -> fmap IncompleteTerm get
154 18 -> return UniverseError
155 19 -> do x <- get ; y <- get
156 return $ UniqueError x y
157 20 -> do x <- get ; y <- get
158 return $ UniqueKindError x y
159 21 -> return ProgramLineComment
160 22 -> fmap Inaccessible get
161 23 -> fmap NonCollapsiblePostulate get
162 24 -> fmap AlreadyDefined get
163 25 -> fmap ProofSearchFail get
164 26 -> fmap NoRewriting get
165 27 -> do x <- get ; y <- get
167 28 -> do x <- get ; y <- get ; z <- get
168 return $ Elaborating x y z
169 29 -> do w <- get ; x <- get ; y <- get ; z <- get
170 return $ ElaboratingArg w x y z
171 30 -> fmap ProviderError get
172 31 -> do x <- get ; y <- get
173 return $ LoadingFailed x y
174 32 -> do x <- get ; y <- get
175 return $ ReflectionError x y
176 33 -> do x <- get ; y <- get
177 return $ ReflectionFailed x y
178 34 -> fmap WithFnType get
179 35 -> fmap CantMatch get
180 _ -> error "Corrupted binary data for Err'"
181----- Generated by 'derive'
183instance Binary FC where
184 put (FC x1 (x2, x3) (x4, x5))
186 put (x2 * 65536 + x3)
187 put (x4 * 65536 + x5)
192 return (FC x1 (x2x3 `div` 65536, x2x3 `mod` 65536) (x4x5 `div` 65536, x4x5 `mod` 65536))
195instance Binary Name where
198 UN x1 -> do putWord8 0
200 NS x1 x2 -> do putWord8 1
203 MN x1 x2 -> do putWord8 2
206 NErased -> putWord8 3
207 SN x1 -> do putWord8 4
209 SymRef x1 -> do putWord8 5
227 _ -> error "Corrupted binary data for Name"
229instance Binary T.Text where
234instance Binary SpecialName where
237 WhereN x1 x2 x3 -> do putWord8 0
241 InstanceN x1 x2 -> do putWord8 1
244 ParentN x1 x2 -> do putWord8 2
247 MethodN x1 -> do putWord8 3
249 CaseN x1 -> do putWord8 4; put x1
250 ElimN x1 -> do putWord8 5; put x1
251 InstanceCtorN x1 -> do putWord8 6; put x1
252 WithN x1 x2 -> do putWord8 7
261 return (WhereN x1 x2 x3)
264 return (InstanceN x1 x2)
267 return (ParentN x1 x2)
275 return (InstanceCtorN x1)
279 _ -> error "Corrupted binary data for SpecialName"
282instance Binary Const where
285 I x1 -> do putWord8 0
287 BI x1 -> do putWord8 1
289 Fl x1 -> do putWord8 2
291 Ch x1 -> do putWord8 3
293 Str x1 -> do putWord8 4
295 B8 x1 -> putWord8 5 >> put x1
296 B16 x1 -> putWord8 6 >> put x1
297 B32 x1 -> putWord8 7 >> put x1
298 B64 x1 -> putWord8 8 >> put x1
300 (AType (ATInt ITNative)) -> putWord8 9
301 (AType (ATInt ITBig)) -> putWord8 10
302 (AType ATFloat) -> putWord8 11
303 (AType (ATInt ITChar)) -> putWord8 12
304 StrType -> putWord8 13
305 PtrType -> putWord8 14
306 Forgot -> putWord8 15
307 (AType (ATInt (ITFixed ity))) -> putWord8 (fromIntegral (16 + fromEnum ity)) -- 16-19 inclusive
308 (AType (ATInt (ITVec ity count))) -> do
310 putWord8 (fromIntegral . fromEnum $ ity)
311 putWord8 (fromIntegral count)
313 B8V x1 -> putWord8 21 >> put x1
314 B16V x1 -> putWord8 22 >> put x1
315 B32V x1 -> putWord8 23 >> put x1
316 B64V x1 -> putWord8 24 >> put x1
317 BufferType -> putWord8 25
318 ManagedPtrType -> putWord8 26
319 VoidType -> putWord8 27
338 9 -> return (AType (ATInt ITNative))
339 10 -> return (AType (ATInt ITBig))
340 11 -> return (AType ATFloat)
341 12 -> return (AType (ATInt ITChar))
346 16 -> return (AType (ATInt (ITFixed IT8)))
347 17 -> return (AType (ATInt (ITFixed IT16)))
348 18 -> return (AType (ATInt (ITFixed IT32)))
349 19 -> return (AType (ATInt (ITFixed IT64)))
354 return (AType (ATInt (ITVec (toEnum . fromIntegral $ e) (fromIntegral c))))
360 25 -> return BufferType
361 26 -> return ManagedPtrType
362 27 -> return VoidType
363 _ -> error "Corrupted binary data for Const"
366instance Binary Raw where
369 Var x1 -> do putWord8 0
371 RBind x1 x2 x3 -> do putWord8 1
375 RApp x1 x2 -> do putWord8 2
379 RConstant x1 -> do putWord8 4
381 RForce x1 -> do putWord8 5
383 RUType x1 -> do putWord8 6
393 return (RBind x1 x2 x3)
399 return (RConstant x1)
404 _ -> error "Corrupted binary data for Raw"
407instance (Binary b) => Binary (Binder b) where
410 Lam x1 -> do putWord8 0
412 Pi x1 x2 -> do putWord8 1
415 Let x1 x2 -> do putWord8 2
418 NLet x1 x2 -> do putWord8 3
421 Hole x1 -> do putWord8 4
423 GHole x1 x2 -> do putWord8 5
426 Guess x1 x2 -> do putWord8 6
429 PVar x1 -> do putWord8 7
431 PVTy x1 -> do putWord8 8
459 _ -> error "Corrupted binary data for Binder"
462instance Binary Universe where
464 UniqueType -> putWord8 0
465 AllTypes -> putWord8 1
466 NullType -> putWord8 2
467 get = do i <- getWord8
469 0 -> return UniqueType
472 _ -> error "Corrupted binary data for Universe"
474instance Binary NameType where
479 DCon x1 x2 x3 -> do putWord8 2
480 put (x1 * 65536 + x2)
482 TCon x1 x2 -> do putWord8 3
483 put (x1 * 65536 + x2)
491 return (DCon (x1x2 `div` 65536) (x1x2 `mod` 65536) x3)
493 return (TCon (x1x2 `div` 65536) (x1x2 `mod` 65536))
494 _ -> error "Corrupted binary data for NameType"
497instance {- (Binary n) => -} Binary (TT Name) where
499 = {-# SCC "putTT" #-}
501 P x1 x2 x3 -> do putWord8 0
505 V x1 -> if (x1 >= 0 && x1 < 256)
507 putWord8 (toEnum (x1 + 1))
510 Bind x1 x2 x3 -> do putWord8 2
514 App x1 x2 -> do putWord8 3
517 Constant x1 -> do putWord8 4
519 Proj x1 x2 -> do putWord8 5
521 putWord8 (toEnum (x2 + 1))
523 TType x1 -> do putWord8 7
525 Impossible -> putWord8 8
526 UType x1 -> do putWord8 10
534 return (P x1 x2 Erased)
535 1 -> do x1 <- getWord8
536 return (V ((fromEnum x1) - 1))
540 return (Bind x1 x2 x3)
548 return (Proj x1 ((fromEnum x2)-1))
552 8 -> return Impossible
557 _ -> error "Corrupted binary data for TT"
keysesc to close
- j k
- move down, up
- enter
- open
- esc
- back, or up a level
- 1 2 3 4
- readme, files, commits, refs
- /
- filter
- y
- copy the clone command
- c
- compare the chosen commit with another (or shift-click both)
- ?
- show or hide this list