1{-# OPTIONS_GHC -fwarn-incomplete-patterns #-}
3{-| Binary instances for the core datatypes -}
4module Idris.Core.Binary where
6import Control.Applicative ((<*>), (<$>))
7import Control.Monad (liftM2)
8import Control.DeepSeq (($!!))
11import Data.Vector.Binary
12import qualified Data.Text as T
13import qualified Data.Text.Encoding as E
16instance Binary ErrorReportPart where
17 put (TextPart msg) = do putWord8 0 ; put msg
18 put (NamePart n) = do putWord8 1 ; put n
19 put (TermPart t) = do putWord8 2 ; put t
20 put (SubReport ps) = do putWord8 3 ; put ps
21 put (RawPart r) = do putWord8 4 ; put r
23 get = do i <- getWord8
25 0 -> fmap TextPart get
26 1 -> fmap NamePart get
27 2 -> fmap TermPart get
28 3 -> fmap SubReport get
30 _ -> error "Corrupted binary data for ErrorReportPart"
32instance Binary Provenance where
33 put ExpectedType = putWord8 0
34 put (SourceTerm t) = do putWord8 1
36 put InferredVal = putWord8 2
37 put GivenVal = putWord8 3
38 put (TooManyArgs t) = do putWord8 4
41 get = do i <- getWord8
43 0 -> return ExpectedType
45 return (SourceTerm x1)
46 2 -> return InferredVal
49 return (TooManyArgs x1)
50 _ -> error "Corrupted binary data for Provenance"
52instance Binary UConstraint where
53 put (ULT x1 x2) = putWord8 0 >> put x1 >> put x2
54 put (ULE x1 x2) = putWord8 1 >> put x1 >> put x2
55 get = do i <- getWord8
57 0 -> ULT <$> get <*> get
58 1 -> ULE <$> get <*> get
59 _ -> error "Corrupted binary data for UConstraint"
61instance Binary ConstraintFC where
62 put (ConstraintFC x1 x2) = putWord8 0 >> put x1 >> put x2
63 get = do i <- getWord8
65 0 -> liftM2 ConstraintFC get get
66 _ -> error "Corrupted binary data for ConstraintFC"
68instance Binary a => Binary (Err' a) where
69 put (Msg str) = do putWord8 0
71 put (InternalMsg str) = do putWord8 1
73 put (CantUnify x y z e ctxt i) = do putWord8 2
80 put (InfiniteUnify n t ctxt) = do putWord8 3
84 put (CantConvert x y ctxt) = do putWord8 4
88 put (CantSolveGoal x ctxt) = do putWord8 5
91 put (UnifyScope n1 n2 x ctxt) = do putWord8 6
96 put (CantInferType str) = do putWord8 7
98 put (NonFunctionType t1 t2) = do putWord8 8
101 put (NotEquality t1 t2) = do putWord8 9
104 put (TooManyArguments n) = do putWord8 10
106 put (CantIntroduce t) = do putWord8 11
108 put (NoSuchVariable n) = do putWord8 12
110 put (NoTypeDecl n) = do putWord8 13
112 put (NotInjective x y z) = do putWord8 14
116 put (CantResolve _ t) = do putWord8 15
118 put (CantResolveAlts ns) = do putWord8 16
120 put (IncompleteTerm t) = do putWord8 17
122 put (UniverseError x1 x2 x3 x4 x5) = do putWord8 18
128 put (UniqueError u n) = do putWord8 19
131 put (UniqueKindError u n) = do putWord8 20
134 put ProgramLineComment = putWord8 21
135 put (Inaccessible n) = do putWord8 22
137 put (NonCollapsiblePostulate n) = do putWord8 23
139 put (AlreadyDefined n) = do putWord8 24
141 put (ProofSearchFail e) = do putWord8 25
143 put (NoRewriting t) = do putWord8 26
145 put (At fc e) = do putWord8 27
148 put (Elaborating str n e) = do putWord8 28
152 put (ElaboratingArg n1 n2 ns e) = do putWord8 29
157 put (ProviderError str) = do putWord8 30
159 put (LoadingFailed str e) = do putWord8 31
162 put (ReflectionError parts e) = do putWord8 32
165 put (ReflectionFailed str e) = do putWord8 33
168 put (WithFnType t) = do putWord8 34
170 put (CantMatch t) = do putWord8 35
172 put (ElabScriptDebug x1 x2 x3) = do putWord8 36
176 put (NoEliminator s t) = do putWord8 37
179 put (InvalidTCArg n t) = do putWord8 38
182 put (ElabScriptStuck x1) = do putWord8 39
184 put (UnknownImplicit n f) = do putWord8 40
187 put (NoValidAlts ns) = do putWord8 41
190 get = do i <- getWord8
193 1 -> fmap InternalMsg get
194 2 -> do x <- get ; y <- get ; z <- get ; e <- get ; ctxt <- get ; i <- get
195 return $ CantUnify x y z e ctxt i
196 3 -> do x <- get ; y <- get ; z <- get
197 return $ InfiniteUnify x y z
198 4 -> do x <- get ; y <- get ; z <- get
199 return $ CantConvert x y z
200 5 -> do x <- get ; y <- get
201 return $ CantSolveGoal x y
202 6 -> do w <- get ; x <- get ; y <- get ; z <- get
203 return $ UnifyScope w x y z
204 7 -> fmap CantInferType get
205 8 -> do x <- get ; y <- get
206 return $ NonFunctionType x y
207 9 -> do x <- get ; y <- get
208 return $ NotEquality x y
209 10 -> fmap TooManyArguments get
210 11 -> fmap CantIntroduce get
211 12 -> fmap NoSuchVariable get
212 13 -> fmap NoTypeDecl get
213 14 -> do x <- get ; y <- get ; z <- get
214 return $ NotInjective x y z
215 15 -> fmap (CantResolve False) get
216 16 -> fmap CantResolveAlts get
217 17 -> fmap IncompleteTerm get
218 18 -> UniverseError <$> get <*> get <*> get <*> get <*> get
219 19 -> do x <- get ; y <- get
220 return $ UniqueError x y
221 20 -> do x <- get ; y <- get
222 return $ UniqueKindError x y
223 21 -> return ProgramLineComment
224 22 -> fmap Inaccessible get
225 23 -> fmap NonCollapsiblePostulate get
226 24 -> fmap AlreadyDefined get
227 25 -> fmap ProofSearchFail get
228 26 -> fmap NoRewriting get
229 27 -> do x <- get ; y <- get
231 28 -> do x <- get ; y <- get ; z <- get
232 return $ Elaborating x y z
233 29 -> do w <- get ; x <- get ; y <- get ; z <- get
234 return $ ElaboratingArg w x y z
235 30 -> fmap ProviderError get
236 31 -> do x <- get ; y <- get
237 return $ LoadingFailed x y
238 32 -> do x <- get ; y <- get
239 return $ ReflectionError x y
240 33 -> do x <- get ; y <- get
241 return $ ReflectionFailed x y
242 34 -> fmap WithFnType get
243 35 -> fmap CantMatch get
247 return (ElabScriptDebug x1 x2 x3)
250 return (NoEliminator x1 x2)
253 return (InvalidTCArg x1 x2)
255 return (ElabScriptStuck x1)
256 40 -> do x <- get ; y <- get
257 return $ UnknownImplicit x y
258 41 -> fmap NoValidAlts get
259 _ -> error "Corrupted binary data for Err'"
260----- Generated by 'derive'
262instance Binary FC where
265 (FC x1 (x2, x3) (x4, x5)) -> do putWord8 0
267 put (x2 * 65536 + x3)
268 put (x4 * 65536 + x5)
270 FileFC x1 -> do putWord8 2
278 return (FC x1 (x2x3 `div` 65536, x2x3 `mod` 65536) (x4x5 `div` 65536, x4x5 `mod` 65536))
282 _ -> error "Corrupted binary data for FC"
285instance Binary Name where
288 UN x1 -> do putWord8 0
290 NS x1 x2 -> do putWord8 1
293 MN x1 x2 -> do putWord8 2
296 NErased -> putWord8 3
297 SN x1 -> do putWord8 4
299 SymRef x1 -> do putWord8 5
317 _ -> error "Corrupted binary data for Name"
319instance Binary SpecialName where
322 WhereN x1 x2 x3 -> do putWord8 0
326 InstanceN x1 x2 -> do putWord8 1
329 ParentN x1 x2 -> do putWord8 2
332 MethodN x1 -> do putWord8 3
334 CaseN x1 -> do putWord8 4; put x1
335 ElimN x1 -> do putWord8 5; put x1
336 InstanceCtorN x1 -> do putWord8 6; put x1
337 WithN x1 x2 -> do putWord8 7
340 MetaN x1 x2 -> do putWord8 8
349 return (WhereN x1 x2 x3)
352 return (InstanceN x1 x2)
355 return (ParentN x1 x2)
363 return (InstanceCtorN x1)
370 _ -> error "Corrupted binary data for SpecialName"
373instance Binary Const where
376 I x1 -> do putWord8 0
378 BI x1 -> do putWord8 1
380 Fl x1 -> do putWord8 2
382 Ch x1 -> do putWord8 3
384 Str x1 -> do putWord8 4
386 B8 x1 -> putWord8 5 >> put x1
387 B16 x1 -> putWord8 6 >> put x1
388 B32 x1 -> putWord8 7 >> put x1
389 B64 x1 -> putWord8 8 >> put x1
391 (AType (ATInt ITNative)) -> putWord8 9
392 (AType (ATInt ITBig)) -> putWord8 10
393 (AType ATFloat) -> putWord8 11
394 (AType (ATInt ITChar)) -> putWord8 12
395 StrType -> putWord8 13
396 Forgot -> putWord8 15
397 (AType (ATInt (ITFixed ity))) -> putWord8 (fromIntegral (16 + fromEnum ity)) -- 16-19 inclusive
398 VoidType -> putWord8 27
399 WorldType -> putWord8 28
400 TheWorld -> putWord8 29
419 9 -> return (AType (ATInt ITNative))
420 10 -> return (AType (ATInt ITBig))
421 11 -> return (AType ATFloat)
422 12 -> return (AType (ATInt ITChar))
426 16 -> return (AType (ATInt (ITFixed IT8)))
427 17 -> return (AType (ATInt (ITFixed IT16)))
428 18 -> return (AType (ATInt (ITFixed IT32)))
429 19 -> return (AType (ATInt (ITFixed IT64)))
431 27 -> return VoidType
432 28 -> return WorldType
433 29 -> return TheWorld
434 _ -> error "Corrupted binary data for Const"
437instance Binary Raw where
440 Var x1 -> do putWord8 0
442 RBind x1 x2 x3 -> do putWord8 1
446 RApp x1 x2 -> do putWord8 2
450 RConstant x1 -> do putWord8 4
452 RForce x1 -> do putWord8 5
454 RUType x1 -> do putWord8 6
464 return (RBind x1 x2 x3)
470 return (RConstant x1)
475 _ -> error "Corrupted binary data for Raw"
477instance Binary ImplicitInfo where
485instance (Binary b) => Binary (Binder b) where
488 Lam x1 -> do putWord8 0
490 Pi x1 x2 x3 -> do putWord8 1
494 Let x1 x2 -> do putWord8 2
497 NLet x1 x2 -> do putWord8 3
500 Hole x1 -> do putWord8 4
502 GHole x1 x2 -> do putWord8 5
505 Guess x1 x2 -> do putWord8 6
508 PVar x1 -> do putWord8 7
510 PVTy x1 -> do putWord8 8
539 _ -> error "Corrupted binary data for Binder"
542instance Binary Universe where
544 UniqueType -> putWord8 0
545 AllTypes -> putWord8 1
546 NullType -> putWord8 2
547 get = do i <- getWord8
549 0 -> return UniqueType
552 _ -> error "Corrupted binary data for Universe"
554instance Binary NameType where
559 DCon x1 x2 x3 -> do putWord8 2
560 put (x1 * 65536 + x2)
562 TCon x1 x2 -> do putWord8 3
563 put (x1 * 65536 + x2)
571 return (DCon (x1x2 `div` 65536) (x1x2 `mod` 65536) x3)
573 return (TCon (x1x2 `div` 65536) (x1x2 `mod` 65536))
574 _ -> error "Corrupted binary data for NameType"
576-- record concrete levels only, for now
577instance Binary UExp where
579 UVar t -> do putWord8 0
580 put ((-1) :: Int) -- TMP HACK!
581 UVal t -> do putWord8 1
584 get = do i <- getWord8
590 _ -> error "Corrupted binary data for UExp"
592instance {- (Binary n) => -} Binary (TT Name) where
594 = {-# SCC "putTT" #-}
596 P x1 x2 x3 -> do putWord8 0
600 V x1 -> if (x1 >= 0 && x1 < 256)
602 putWord8 (toEnum (x1 + 1))
605 Bind x1 x2 x3 -> do putWord8 2
609 App _ x1 x2 -> do putWord8 3
612 Constant x1 -> do putWord8 4
614 Proj x1 x2 -> do putWord8 5
616 putWord8 (toEnum (x2 + 1))
618 TType x1 -> do putWord8 7
620 Impossible -> putWord8 8
621 UType x1 -> do putWord8 10
629 return (P x1 x2 Erased)
630 1 -> do x1 <- getWord8
631 return (V ((fromEnum x1) - 1))
635 return (Bind x1 x2 x3)
638 return (App Complete x1 x2)
643 return (Proj x1 ((fromEnum x2)-1))
647 8 -> return Impossible
652 _ -> 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