1{-# OPTIONS_GHC -fwarn-incomplete-patterns #-}
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 Provenance where
27 put ExpectedType = putWord8 0
28 put (SourceTerm t) = do putWord8 1
30 put InferredVal = putWord8 2
31 put GivenVal = putWord8 3
32 put (TooManyArgs t) = do putWord8 4
35 get = do i <- getWord8
37 0 -> return ExpectedType
39 return (SourceTerm x1)
40 2 -> return InferredVal
43 return (TooManyArgs x1)
44 _ -> error "Corrupted binary data for Provenance"
46instance Binary a => Binary (Err' a) where
47 put (Msg str) = do putWord8 0
49 put (InternalMsg str) = do putWord8 1
51 put (CantUnify x y z e ctxt i) = do putWord8 2
58 put (InfiniteUnify n t ctxt) = do putWord8 3
62 put (CantConvert x y ctxt) = do putWord8 4
66 put (CantSolveGoal x ctxt) = do putWord8 5
69 put (UnifyScope n1 n2 x ctxt) = do putWord8 6
74 put (CantInferType str) = do putWord8 7
76 put (NonFunctionType t1 t2) = do putWord8 8
79 put (NotEquality t1 t2) = do putWord8 9
82 put (TooManyArguments n) = do putWord8 10
84 put (CantIntroduce t) = do putWord8 11
86 put (NoSuchVariable n) = do putWord8 12
88 put (NoTypeDecl n) = do putWord8 13
90 put (NotInjective x y z) = do putWord8 14
94 put (CantResolve _ t) = do putWord8 15
96 put (CantResolveAlts ns) = do putWord8 16
98 put (IncompleteTerm t) = do putWord8 17
100 put UniverseError = putWord8 18
101 put (UniqueError u n) = do putWord8 19
104 put (UniqueKindError u n) = do putWord8 20
107 put ProgramLineComment = putWord8 21
108 put (Inaccessible n) = do putWord8 22
110 put (NonCollapsiblePostulate n) = do putWord8 23
112 put (AlreadyDefined n) = do putWord8 24
114 put (ProofSearchFail e) = do putWord8 25
116 put (NoRewriting t) = do putWord8 26
118 put (At fc e) = do putWord8 27
121 put (Elaborating str n e) = do putWord8 28
125 put (ElaboratingArg n1 n2 ns e) = do putWord8 29
130 put (ProviderError str) = do putWord8 30
132 put (LoadingFailed str e) = do putWord8 31
135 put (ReflectionError parts e) = do putWord8 32
138 put (ReflectionFailed str e) = do putWord8 33
141 put (WithFnType t) = do putWord8 34
143 put (CantMatch t) = do putWord8 35
145 put (ElabDebug x1 x2 x3) = do putWord8 36
149 put (NoEliminator s t) = do putWord8 37
152 put (InvalidTCArg n t) = do putWord8 38
156 get = do i <- getWord8
159 1 -> fmap InternalMsg get
160 2 -> do x <- get ; y <- get ; z <- get ; e <- get ; ctxt <- get ; i <- get
161 return $ CantUnify x y z e ctxt i
162 3 -> do x <- get ; y <- get ; z <- get
163 return $ InfiniteUnify x y z
164 4 -> do x <- get ; y <- get ; z <- get
165 return $ CantConvert x y z
166 5 -> do x <- get ; y <- get
167 return $ CantSolveGoal x y
168 6 -> do w <- get ; x <- get ; y <- get ; z <- get
169 return $ UnifyScope w x y z
170 7 -> fmap CantInferType get
171 8 -> do x <- get ; y <- get
172 return $ NonFunctionType x y
173 9 -> do x <- get ; y <- get
174 return $ NotEquality x y
175 10 -> fmap TooManyArguments get
176 11 -> fmap CantIntroduce get
177 12 -> fmap NoSuchVariable get
178 13 -> fmap NoTypeDecl get
179 14 -> do x <- get ; y <- get ; z <- get
180 return $ NotInjective x y z
181 15 -> fmap (CantResolve False) get
182 16 -> fmap CantResolveAlts get
183 17 -> fmap IncompleteTerm get
184 18 -> return UniverseError
185 19 -> do x <- get ; y <- get
186 return $ UniqueError x y
187 20 -> do x <- get ; y <- get
188 return $ UniqueKindError x y
189 21 -> return ProgramLineComment
190 22 -> fmap Inaccessible get
191 23 -> fmap NonCollapsiblePostulate get
192 24 -> fmap AlreadyDefined get
193 25 -> fmap ProofSearchFail get
194 26 -> fmap NoRewriting get
195 27 -> do x <- get ; y <- get
197 28 -> do x <- get ; y <- get ; z <- get
198 return $ Elaborating x y z
199 29 -> do w <- get ; x <- get ; y <- get ; z <- get
200 return $ ElaboratingArg w x y z
201 30 -> fmap ProviderError get
202 31 -> do x <- get ; y <- get
203 return $ LoadingFailed x y
204 32 -> do x <- get ; y <- get
205 return $ ReflectionError x y
206 33 -> do x <- get ; y <- get
207 return $ ReflectionFailed x y
208 34 -> fmap WithFnType get
209 35 -> fmap CantMatch get
213 return (ElabDebug x1 x2 x3)
216 return (NoEliminator x1 x2)
219 return (InvalidTCArg x1 x2)
220 _ -> error "Corrupted binary data for Err'"
221----- Generated by 'derive'
223instance Binary FC where
224 put (FC x1 (x2, x3) (x4, x5))
226 put (x2 * 65536 + x3)
227 put (x4 * 65536 + x5)
232 return (FC x1 (x2x3 `div` 65536, x2x3 `mod` 65536) (x4x5 `div` 65536, x4x5 `mod` 65536))
235instance Binary Name where
238 UN x1 -> do putWord8 0
240 NS x1 x2 -> do putWord8 1
243 MN x1 x2 -> do putWord8 2
246 NErased -> putWord8 3
247 SN x1 -> do putWord8 4
249 SymRef x1 -> do putWord8 5
267 _ -> error "Corrupted binary data for Name"
269instance Binary T.Text where
274instance Binary SpecialName where
277 WhereN x1 x2 x3 -> do putWord8 0
281 InstanceN x1 x2 -> do putWord8 1
284 ParentN x1 x2 -> do putWord8 2
287 MethodN x1 -> do putWord8 3
289 CaseN x1 -> do putWord8 4; put x1
290 ElimN x1 -> do putWord8 5; put x1
291 InstanceCtorN x1 -> do putWord8 6; put x1
292 WithN x1 x2 -> do putWord8 7
301 return (WhereN x1 x2 x3)
304 return (InstanceN x1 x2)
307 return (ParentN x1 x2)
315 return (InstanceCtorN x1)
319 _ -> error "Corrupted binary data for SpecialName"
322instance Binary Const where
325 I x1 -> do putWord8 0
327 BI x1 -> do putWord8 1
329 Fl x1 -> do putWord8 2
331 Ch x1 -> do putWord8 3
333 Str x1 -> do putWord8 4
335 B8 x1 -> putWord8 5 >> put x1
336 B16 x1 -> putWord8 6 >> put x1
337 B32 x1 -> putWord8 7 >> put x1
338 B64 x1 -> putWord8 8 >> put x1
340 (AType (ATInt ITNative)) -> putWord8 9
341 (AType (ATInt ITBig)) -> putWord8 10
342 (AType ATFloat) -> putWord8 11
343 (AType (ATInt ITChar)) -> putWord8 12
344 StrType -> putWord8 13
345 PtrType -> putWord8 14
346 Forgot -> putWord8 15
347 (AType (ATInt (ITFixed ity))) -> putWord8 (fromIntegral (16 + fromEnum ity)) -- 16-19 inclusive
348 (AType (ATInt (ITVec ity count))) -> do
350 putWord8 (fromIntegral . fromEnum $ ity)
351 putWord8 (fromIntegral count)
353 B8V x1 -> putWord8 21 >> put x1
354 B16V x1 -> putWord8 22 >> put x1
355 B32V x1 -> putWord8 23 >> put x1
356 B64V x1 -> putWord8 24 >> put x1
357 BufferType -> putWord8 25
358 ManagedPtrType -> putWord8 26
359 VoidType -> putWord8 27
360 WorldType -> putWord8 28
361 TheWorld -> putWord8 29
380 9 -> return (AType (ATInt ITNative))
381 10 -> return (AType (ATInt ITBig))
382 11 -> return (AType ATFloat)
383 12 -> return (AType (ATInt ITChar))
388 16 -> return (AType (ATInt (ITFixed IT8)))
389 17 -> return (AType (ATInt (ITFixed IT16)))
390 18 -> return (AType (ATInt (ITFixed IT32)))
391 19 -> return (AType (ATInt (ITFixed IT64)))
396 return (AType (ATInt (ITVec (toEnum . fromIntegral $ e) (fromIntegral c))))
402 25 -> return BufferType
403 26 -> return ManagedPtrType
404 27 -> return VoidType
405 28 -> return WorldType
406 29 -> return TheWorld
407 _ -> error "Corrupted binary data for Const"
410instance Binary Raw where
413 Var x1 -> do putWord8 0
415 RBind x1 x2 x3 -> do putWord8 1
419 RApp x1 x2 -> do putWord8 2
423 RConstant x1 -> do putWord8 4
425 RForce x1 -> do putWord8 5
427 RUType x1 -> do putWord8 6
437 return (RBind x1 x2 x3)
443 return (RConstant x1)
448 _ -> error "Corrupted binary data for Raw"
450instance Binary ImplicitInfo where
458instance (Binary b) => Binary (Binder b) where
461 Lam x1 -> do putWord8 0
463 Pi x1 x2 x3 -> do putWord8 1
467 Let x1 x2 -> do putWord8 2
470 NLet x1 x2 -> do putWord8 3
473 Hole x1 -> do putWord8 4
475 GHole x1 x2 -> do putWord8 5
478 Guess x1 x2 -> do putWord8 6
481 PVar x1 -> do putWord8 7
483 PVTy x1 -> do putWord8 8
512 _ -> error "Corrupted binary data for Binder"
515instance Binary Universe where
517 UniqueType -> putWord8 0
518 AllTypes -> putWord8 1
519 NullType -> putWord8 2
520 get = do i <- getWord8
522 0 -> return UniqueType
525 _ -> error "Corrupted binary data for Universe"
527instance Binary NameType where
532 DCon x1 x2 x3 -> do putWord8 2
533 put (x1 * 65536 + x2)
535 TCon x1 x2 -> do putWord8 3
536 put (x1 * 65536 + x2)
544 return (DCon (x1x2 `div` 65536) (x1x2 `mod` 65536) x3)
546 return (TCon (x1x2 `div` 65536) (x1x2 `mod` 65536))
547 _ -> error "Corrupted binary data for NameType"
549-- record concrete levels only, for now
550instance Binary UExp where
552 UVar t -> do putWord8 0
553 put ((-1) :: Int) -- TMP HACK!
554 UVal t -> do putWord8 1
557 get = do i <- getWord8
563 _ -> error "Corrupted binary data for UExp"
565instance {- (Binary n) => -} Binary (TT Name) where
567 = {-# SCC "putTT" #-}
569 P x1 x2 x3 -> do putWord8 0
573 V x1 -> if (x1 >= 0 && x1 < 256)
575 putWord8 (toEnum (x1 + 1))
578 Bind x1 x2 x3 -> do putWord8 2
582 App x1 x2 -> do putWord8 3
585 Constant x1 -> do putWord8 4
587 Proj x1 x2 -> do putWord8 5
589 putWord8 (toEnum (x2 + 1))
591 TType x1 -> do putWord8 7
593 Impossible -> putWord8 8
594 UType x1 -> do putWord8 10
602 return (P x1 x2 Erased)
603 1 -> do x1 <- getWord8
604 return (V ((fromEnum x1) - 1))
608 return (Bind x1 x2 x3)
616 return (Proj x1 ((fromEnum x2)-1))
620 8 -> return Impossible
625 _ -> 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