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
150 get = do i <- getWord8
153 1 -> fmap InternalMsg get
154 2 -> do x <- get ; y <- get ; z <- get ; e <- get ; ctxt <- get ; i <- get
155 return $ CantUnify x y z e ctxt i
156 3 -> do x <- get ; y <- get ; z <- get
157 return $ InfiniteUnify x y z
158 4 -> do x <- get ; y <- get ; z <- get
159 return $ CantConvert x y z
160 5 -> do x <- get ; y <- get
161 return $ CantSolveGoal x y
162 6 -> do w <- get ; x <- get ; y <- get ; z <- get
163 return $ UnifyScope w x y z
164 7 -> fmap CantInferType get
165 8 -> do x <- get ; y <- get
166 return $ NonFunctionType x y
167 9 -> do x <- get ; y <- get
168 return $ NotEquality x y
169 10 -> fmap TooManyArguments get
170 11 -> fmap CantIntroduce get
171 12 -> fmap NoSuchVariable get
172 13 -> fmap NoTypeDecl get
173 14 -> do x <- get ; y <- get ; z <- get
174 return $ NotInjective x y z
175 15 -> fmap CantResolve get
176 16 -> fmap CantResolveAlts get
177 17 -> fmap IncompleteTerm get
178 18 -> return UniverseError
179 19 -> do x <- get ; y <- get
180 return $ UniqueError x y
181 20 -> do x <- get ; y <- get
182 return $ UniqueKindError x y
183 21 -> return ProgramLineComment
184 22 -> fmap Inaccessible get
185 23 -> fmap NonCollapsiblePostulate get
186 24 -> fmap AlreadyDefined get
187 25 -> fmap ProofSearchFail get
188 26 -> fmap NoRewriting get
189 27 -> do x <- get ; y <- get
191 28 -> do x <- get ; y <- get ; z <- get
192 return $ Elaborating x y z
193 29 -> do w <- get ; x <- get ; y <- get ; z <- get
194 return $ ElaboratingArg w x y z
195 30 -> fmap ProviderError get
196 31 -> do x <- get ; y <- get
197 return $ LoadingFailed x y
198 32 -> do x <- get ; y <- get
199 return $ ReflectionError x y
200 33 -> do x <- get ; y <- get
201 return $ ReflectionFailed x y
202 34 -> fmap WithFnType get
203 35 -> fmap CantMatch get
207 return (ElabDebug x1 x2 x3)
208 _ -> error "Corrupted binary data for Err'"
209----- Generated by 'derive'
211instance Binary FC where
212 put (FC x1 (x2, x3) (x4, x5))
214 put (x2 * 65536 + x3)
215 put (x4 * 65536 + x5)
220 return (FC x1 (x2x3 `div` 65536, x2x3 `mod` 65536) (x4x5 `div` 65536, x4x5 `mod` 65536))
223instance Binary Name where
226 UN x1 -> do putWord8 0
228 NS x1 x2 -> do putWord8 1
231 MN x1 x2 -> do putWord8 2
234 NErased -> putWord8 3
235 SN x1 -> do putWord8 4
237 SymRef x1 -> do putWord8 5
255 _ -> error "Corrupted binary data for Name"
257instance Binary T.Text where
262instance Binary SpecialName where
265 WhereN x1 x2 x3 -> do putWord8 0
269 InstanceN x1 x2 -> do putWord8 1
272 ParentN x1 x2 -> do putWord8 2
275 MethodN x1 -> do putWord8 3
277 CaseN x1 -> do putWord8 4; put x1
278 ElimN x1 -> do putWord8 5; put x1
279 InstanceCtorN x1 -> do putWord8 6; put x1
280 WithN x1 x2 -> do putWord8 7
289 return (WhereN x1 x2 x3)
292 return (InstanceN x1 x2)
295 return (ParentN x1 x2)
303 return (InstanceCtorN x1)
307 _ -> error "Corrupted binary data for SpecialName"
310instance Binary Const where
313 I x1 -> do putWord8 0
315 BI x1 -> do putWord8 1
317 Fl x1 -> do putWord8 2
319 Ch x1 -> do putWord8 3
321 Str x1 -> do putWord8 4
323 B8 x1 -> putWord8 5 >> put x1
324 B16 x1 -> putWord8 6 >> put x1
325 B32 x1 -> putWord8 7 >> put x1
326 B64 x1 -> putWord8 8 >> put x1
328 (AType (ATInt ITNative)) -> putWord8 9
329 (AType (ATInt ITBig)) -> putWord8 10
330 (AType ATFloat) -> putWord8 11
331 (AType (ATInt ITChar)) -> putWord8 12
332 StrType -> putWord8 13
333 PtrType -> putWord8 14
334 Forgot -> putWord8 15
335 (AType (ATInt (ITFixed ity))) -> putWord8 (fromIntegral (16 + fromEnum ity)) -- 16-19 inclusive
336 (AType (ATInt (ITVec ity count))) -> do
338 putWord8 (fromIntegral . fromEnum $ ity)
339 putWord8 (fromIntegral count)
341 B8V x1 -> putWord8 21 >> put x1
342 B16V x1 -> putWord8 22 >> put x1
343 B32V x1 -> putWord8 23 >> put x1
344 B64V x1 -> putWord8 24 >> put x1
345 BufferType -> putWord8 25
346 ManagedPtrType -> putWord8 26
347 VoidType -> putWord8 27
348 WorldType -> putWord8 28
349 TheWorld -> putWord8 29
368 9 -> return (AType (ATInt ITNative))
369 10 -> return (AType (ATInt ITBig))
370 11 -> return (AType ATFloat)
371 12 -> return (AType (ATInt ITChar))
376 16 -> return (AType (ATInt (ITFixed IT8)))
377 17 -> return (AType (ATInt (ITFixed IT16)))
378 18 -> return (AType (ATInt (ITFixed IT32)))
379 19 -> return (AType (ATInt (ITFixed IT64)))
384 return (AType (ATInt (ITVec (toEnum . fromIntegral $ e) (fromIntegral c))))
390 25 -> return BufferType
391 26 -> return ManagedPtrType
392 27 -> return VoidType
393 28 -> return WorldType
394 29 -> return TheWorld
395 _ -> error "Corrupted binary data for Const"
398instance Binary Raw where
401 Var x1 -> do putWord8 0
403 RBind x1 x2 x3 -> do putWord8 1
407 RApp x1 x2 -> do putWord8 2
411 RConstant x1 -> do putWord8 4
413 RForce x1 -> do putWord8 5
415 RUType x1 -> do putWord8 6
425 return (RBind x1 x2 x3)
431 return (RConstant x1)
436 _ -> error "Corrupted binary data for Raw"
438instance Binary ImplicitInfo where
446instance (Binary b) => Binary (Binder b) where
449 Lam x1 -> do putWord8 0
451 Pi x1 x2 x3 -> do putWord8 1
455 Let x1 x2 -> do putWord8 2
458 NLet x1 x2 -> do putWord8 3
461 Hole x1 -> do putWord8 4
463 GHole x1 x2 -> do putWord8 5
466 Guess x1 x2 -> do putWord8 6
469 PVar x1 -> do putWord8 7
471 PVTy x1 -> do putWord8 8
500 _ -> error "Corrupted binary data for Binder"
503instance Binary Universe where
505 UniqueType -> putWord8 0
506 AllTypes -> putWord8 1
507 NullType -> putWord8 2
508 get = do i <- getWord8
510 0 -> return UniqueType
513 _ -> error "Corrupted binary data for Universe"
515instance Binary NameType where
520 DCon x1 x2 x3 -> do putWord8 2
521 put (x1 * 65536 + x2)
523 TCon x1 x2 -> do putWord8 3
524 put (x1 * 65536 + x2)
532 return (DCon (x1x2 `div` 65536) (x1x2 `mod` 65536) x3)
534 return (TCon (x1x2 `div` 65536) (x1x2 `mod` 65536))
535 _ -> error "Corrupted binary data for NameType"
538instance {- (Binary n) => -} Binary (TT Name) where
540 = {-# SCC "putTT" #-}
542 P x1 x2 x3 -> do putWord8 0
546 V x1 -> if (x1 >= 0 && x1 < 256)
548 putWord8 (toEnum (x1 + 1))
551 Bind x1 x2 x3 -> do putWord8 2
555 App x1 x2 -> do putWord8 3
558 Constant x1 -> do putWord8 4
560 Proj x1 x2 -> do putWord8 5
562 putWord8 (toEnum (x2 + 1))
564 TType x1 -> do putWord8 7
566 Impossible -> putWord8 8
567 UType x1 -> do putWord8 10
575 return (P x1 x2 Erased)
576 1 -> do x1 <- getWord8
577 return (V ((fromEnum x1) - 1))
581 return (Bind x1 x2 x3)
589 return (Proj x1 ((fromEnum x2)-1))
593 8 -> return Impossible
598 _ -> 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