2Module : Idris.Core.Binary
3Description : Binary instances for the core datatypes
6Maintainer : The Idris Community.
8{-# OPTIONS_GHC -fwarn-incomplete-patterns #-}
9module Idris.Core.Binary where
13import Control.Applicative ((<$>), (<*>))
14import Control.DeepSeq (($!!))
15import Control.Monad (liftM2)
17import qualified Data.Text as T
18import qualified Data.Text.Encoding as E
19import Data.Vector.Binary
21instance Binary ErrorReportPart where
22 put (TextPart msg) = do putWord8 0 ; put msg
23 put (NamePart n) = do putWord8 1 ; put n
24 put (TermPart t) = do putWord8 2 ; put t
25 put (SubReport ps) = do putWord8 3 ; put ps
26 put (RawPart r) = do putWord8 4 ; put r
28 get = do i <- getWord8
30 0 -> fmap TextPart get
31 1 -> fmap NamePart get
32 2 -> fmap TermPart get
33 3 -> fmap SubReport get
35 _ -> error "Corrupted binary data for ErrorReportPart"
37instance Binary Provenance where
38 put ExpectedType = putWord8 0
39 put (SourceTerm t) = do putWord8 1
41 put InferredVal = putWord8 2
42 put GivenVal = putWord8 3
43 put (TooManyArgs t) = do putWord8 4
46 get = do i <- getWord8
48 0 -> return ExpectedType
50 return (SourceTerm x1)
51 2 -> return InferredVal
54 return (TooManyArgs x1)
55 _ -> error "Corrupted binary data for Provenance"
57instance Binary UConstraint where
58 put (ULT x1 x2) = putWord8 0 >> put x1 >> put x2
59 put (ULE x1 x2) = putWord8 1 >> put x1 >> put x2
60 get = do i <- getWord8
62 0 -> ULT <$> get <*> get
63 1 -> ULE <$> get <*> get
64 _ -> error "Corrupted binary data for UConstraint"
66instance Binary ConstraintFC where
67 put (ConstraintFC x1 x2) = putWord8 0 >> put x1 >> put x2
68 get = do i <- getWord8
70 0 -> liftM2 ConstraintFC get get
71 _ -> error "Corrupted binary data for ConstraintFC"
73instance Binary a => Binary (Err' a) where
74 put (Msg str) = do putWord8 0
76 put (InternalMsg str) = do putWord8 1
78 put (CantUnify x y z e ctxt i) = do putWord8 2
85 put (InfiniteUnify n t ctxt) = do putWord8 3
89 put (CantConvert x y ctxt) = do putWord8 4
93 put (CantSolveGoal x ctxt) = do putWord8 5
96 put (UnifyScope n1 n2 x ctxt) = do putWord8 6
101 put (CantInferType str) = do putWord8 7
103 put (NonFunctionType t1 t2) = do putWord8 8
106 put (NotEquality t1 t2) = do putWord8 9
109 put (TooManyArguments n) = do putWord8 10
111 put (CantIntroduce t) = do putWord8 11
113 put (NoSuchVariable n) = do putWord8 12
115 put (NoTypeDecl n) = do putWord8 13
117 put (NotInjective x y z) = do putWord8 14
121 put (CantResolve _ t u) = do putWord8 15
124 put (CantResolveAlts ns) = do putWord8 16
126 put (IncompleteTerm t) = do putWord8 17
128 put (UniverseError x1 x2 x3 x4 x5) = do putWord8 18
134 put (UniqueError u n) = do putWord8 19
137 put (UniqueKindError u n) = do putWord8 20
140 put ProgramLineComment = putWord8 21
141 put (Inaccessible n) = do putWord8 22
143 put (NonCollapsiblePostulate n) = do putWord8 23
145 put (AlreadyDefined n) = do putWord8 24
147 put (ProofSearchFail e) = do putWord8 25
149 put (NoRewriting l r t) = do putWord8 26
153 put (At fc e) = do putWord8 27
156 put (Elaborating str n ty e) = do putWord8 28
161 put (ElaboratingArg n1 n2 ns e) = do putWord8 29
166 put (ProviderError str) = do putWord8 30
168 put (LoadingFailed str e) = do putWord8 31
171 put (ReflectionError parts e) = do putWord8 32
174 put (ReflectionFailed str e) = do putWord8 33
177 put (WithFnType t) = do putWord8 34
179 put (CantMatch t) = do putWord8 35
181 put (ElabScriptDebug x1 x2 x3) = do putWord8 36
185 put (NoEliminator s t) = do putWord8 37
188 put (InvalidTCArg n t) = do putWord8 38
191 put (ElabScriptStuck x1) = do putWord8 39
193 put (UnknownImplicit n f) = do putWord8 40
196 put (NoValidAlts ns) = do putWord8 41
198 put (RunningElabScript e) = do putWord8 42
200 put (ElabScriptStaging n) = do putWord8 43
202 put (FancyMsg xs) = do putWord8 44
204 get = do i <- getWord8
207 1 -> fmap InternalMsg get
208 2 -> do x <- get ; y <- get ; z <- get ; e <- get ; ctxt <- get ; i <- get
209 return $ CantUnify x y z e ctxt i
210 3 -> do x <- get ; y <- get ; z <- get
211 return $ InfiniteUnify x y z
212 4 -> do x <- get ; y <- get ; z <- get
213 return $ CantConvert x y z
214 5 -> do x <- get ; y <- get
215 return $ CantSolveGoal x y
216 6 -> do w <- get ; x <- get ; y <- get ; z <- get
217 return $ UnifyScope w x y z
218 7 -> fmap CantInferType get
219 8 -> do x <- get ; y <- get
220 return $ NonFunctionType x y
221 9 -> do x <- get ; y <- get
222 return $ NotEquality x y
223 10 -> fmap TooManyArguments get
224 11 -> fmap CantIntroduce get
225 12 -> fmap NoSuchVariable get
226 13 -> fmap NoTypeDecl get
227 14 -> do x <- get ; y <- get ; z <- get
228 return $ NotInjective x y z
229 15 -> CantResolve False <$> get <*> get
230 16 -> fmap CantResolveAlts get
231 17 -> fmap IncompleteTerm get
232 18 -> UniverseError <$> get <*> get <*> get <*> get <*> get
233 19 -> do x <- get ; y <- get
234 return $ UniqueError x y
235 20 -> do x <- get ; y <- get
236 return $ UniqueKindError x y
237 21 -> return ProgramLineComment
238 22 -> fmap Inaccessible get
239 23 -> fmap NonCollapsiblePostulate get
240 24 -> fmap AlreadyDefined get
241 25 -> fmap ProofSearchFail get
242 26 -> do l <- get; r <- get; t <- get
243 return $ NoRewriting l r t
244 27 -> do x <- get ; y <- get
246 28 -> do w <- get; x <- get ; y <- get ; z <- get
247 return $ Elaborating w x y z
248 29 -> do w <- get ; x <- get ; y <- get ; z <- get
249 return $ ElaboratingArg w x y z
250 30 -> fmap ProviderError get
251 31 -> do x <- get ; y <- get
252 return $ LoadingFailed x y
253 32 -> do x <- get ; y <- get
254 return $ ReflectionError x y
255 33 -> do x <- get ; y <- get
256 return $ ReflectionFailed x y
257 34 -> fmap WithFnType get
258 35 -> fmap CantMatch get
262 return (ElabScriptDebug x1 x2 x3)
265 return (NoEliminator x1 x2)
268 return (InvalidTCArg x1 x2)
270 return (ElabScriptStuck x1)
271 40 -> do x <- get ; y <- get
272 return $ UnknownImplicit x y
273 41 -> fmap NoValidAlts get
274 42 -> fmap RunningElabScript get
275 43 -> fmap ElabScriptStaging get
276 44 -> fmap FancyMsg get
277 _ -> error "Corrupted binary data for Err'"
278----- Generated by 'derive'
280instance Binary FC where
283 (FC x1 (x2, x3) (x4, x5)) -> do putWord8 0
285 put (x2 * 65536 + x3)
286 put (x4 * 65536 + x5)
288 FileFC x1 -> do putWord8 2
296 return (FC x1 (x2x3 `div` 65536, x2x3 `mod` 65536) (x4x5 `div` 65536, x4x5 `mod` 65536))
300 _ -> error "Corrupted binary data for FC"
302instance Binary FC' where
303 put (FC' fc) = put fc
306instance Binary Name where
309 UN x1 -> do putWord8 0
311 NS x1 x2 -> do putWord8 1
314 MN x1 x2 -> do putWord8 2
317 SN x1 -> do putWord8 3
319 SymRef x1 -> do putWord8 4
336 _ -> error "Corrupted binary data for Name"
338instance Binary SpecialName where
341 WhereN x1 x2 x3 -> do putWord8 0
345 ImplementationN x1 x2 -> do putWord8 1
348 ParentN x1 x2 -> do putWord8 2
351 MethodN x1 -> do putWord8 3
353 CaseN x1 x2 -> do putWord8 4; put x1; put x2
354 ElimN x1 -> do putWord8 5; put x1
355 ImplementationCtorN x1 -> do putWord8 6; put x1
356 WithN x1 x2 -> do putWord8 7
359 MetaN x1 x2 -> do putWord8 8
368 return (WhereN x1 x2 x3)
371 return (ImplementationN x1 x2)
374 return (ParentN x1 x2)
383 return (ImplementationCtorN x1)
390 _ -> error "Corrupted binary data for SpecialName"
393instance Binary Const where
396 I x1 -> do putWord8 0
398 BI x1 -> do putWord8 1
400 Fl x1 -> do putWord8 2
402 Ch x1 -> do putWord8 3
404 Str x1 -> do putWord8 4
406 B8 x1 -> putWord8 5 >> put x1
407 B16 x1 -> putWord8 6 >> put x1
408 B32 x1 -> putWord8 7 >> put x1
409 B64 x1 -> putWord8 8 >> put x1
411 (AType (ATInt ITNative)) -> putWord8 9
412 (AType (ATInt ITBig)) -> putWord8 10
413 (AType ATFloat) -> putWord8 11
414 (AType (ATInt ITChar)) -> putWord8 12
415 StrType -> putWord8 13
416 Forgot -> putWord8 15
417 (AType (ATInt (ITFixed ity))) -> putWord8 (fromIntegral (16 + fromEnum ity)) -- 16-19 inclusive
418 VoidType -> putWord8 27
419 WorldType -> putWord8 28
420 TheWorld -> putWord8 29
439 9 -> return (AType (ATInt ITNative))
440 10 -> return (AType (ATInt ITBig))
441 11 -> return (AType ATFloat)
442 12 -> return (AType (ATInt ITChar))
446 16 -> return (AType (ATInt (ITFixed IT8)))
447 17 -> return (AType (ATInt (ITFixed IT16)))
448 18 -> return (AType (ATInt (ITFixed IT32)))
449 19 -> return (AType (ATInt (ITFixed IT64)))
451 27 -> return VoidType
452 28 -> return WorldType
453 29 -> return TheWorld
454 _ -> error "Corrupted binary data for Const"
457instance Binary Raw where
460 Var x1 -> do putWord8 0
462 RBind x1 x2 x3 -> do putWord8 1
466 RApp x1 x2 -> do putWord8 2
470 RConstant x1 -> do putWord8 4
472 RUType x1 -> do putWord8 5
482 return (RBind x1 x2 x3)
488 return (RConstant x1)
491 _ -> error "Corrupted binary data for Raw"
493instance Binary RigCount where
498 get = do i <- getWord8
503 _ -> error "Corrupted binary data for RigCount"
506instance Binary ImplicitInfo where
509 Impl x1 x2 x3 -> do put x1; put x2
513 return (Impl x1 x2 False)
515instance (Binary b) => Binary (Binder b) where
518 Lam x1 x2 -> do putWord8 0
521 Pi x1 x2 x3 x4 -> do putWord8 1
526 Let x1 x2 -> do putWord8 2
529 NLet x1 x2 -> do putWord8 3
532 Hole x1 -> do putWord8 4
534 GHole x1 x2 x3 -> do putWord8 5
538 Guess x1 x2 -> do putWord8 6
541 PVar x1 x2 -> do putWord8 7
544 PVTy x1 -> do putWord8 8
556 return (Pi x1 x2 x3 x4)
568 return (GHole x1 x2 x3)
577 _ -> error "Corrupted binary data for Binder"
580instance Binary Universe where
582 UniqueType -> putWord8 0
583 AllTypes -> putWord8 1
584 NullType -> putWord8 2
585 get = do i <- getWord8
587 0 -> return UniqueType
590 _ -> error "Corrupted binary data for Universe"
592instance Binary NameType where
597 DCon x1 x2 x3 -> do putWord8 2
598 put (x1 * 65536 + x2)
600 TCon x1 x2 -> do putWord8 3
601 put (x1 * 65536 + x2)
609 return (DCon (x1x2 `div` 65536) (x1x2 `mod` 65536) x3)
611 return (TCon (x1x2 `div` 65536) (x1x2 `mod` 65536))
612 _ -> error "Corrupted binary data for NameType"
614-- record concrete levels only, for now
615instance Binary UExp where
617 UVar ns t -> do putWord8 0
620 UVal t -> do putWord8 1
623 get = do i <- getWord8
630 _ -> error "Corrupted binary data for UExp"
632instance {- (Binary n) => -} Binary (TT Name) where
634 = {-# SCC "putTT" #-}
636 P x1 x2 x3 -> do putWord8 0
640 V x1 -> if (x1 >= 0 && x1 < 256)
642 putWord8 (toEnum (x1 + 1))
645 Bind x1 x2 x3 -> do putWord8 2
649 App _ x1 x2 -> do putWord8 3
652 Constant x1 -> do putWord8 4
654 Proj x1 x2 -> do putWord8 5
656 putWord8 (toEnum (x2 + 1))
658 TType x1 -> do putWord8 7
660 Impossible -> putWord8 8
661 Inferred x1 -> put x1 -- drop the 'Inferred'
662 UType x1 -> do putWord8 10
670 return (P x1 x2 Erased)
671 1 -> do x1 <- getWord8
672 return (V ((fromEnum x1) - 1))
676 return (Bind x1 x2 x3)
679 return (App Complete x1 x2)
684 return (Proj x1 ((fromEnum x2)-1))
688 8 -> return Impossible
693 _ -> 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