diff --git a/parser-typechecker/src/Unison/Builtin.hs b/parser-typechecker/src/Unison/Builtin.hs index 69cb0d42af..d328ce0708 100644 --- a/parser-typechecker/src/Unison/Builtin.hs +++ b/parser-typechecker/src/Unison/Builtin.hs @@ -833,6 +833,12 @@ ioBuiltins = ( "validateSandboxed", forall1 "a" $ \a -> list termLink --> a --> boolean ), + ("sandboxLinks", termLink --> io (list termLink)), + ( "Value.validateSandboxed", + list termLink + --> value + --> io (eithert (list termLink) (list termLink)) + ), ("Tls.newClient.impl.v3", tlsClientConfig --> socket --> iof tls), ("Tls.newServer.impl.v3", tlsServerConfig --> socket --> iof tls), ("Tls.handshake.impl.v3", tls --> iof unit), diff --git a/parser-typechecker/src/Unison/Runtime/ANF.hs b/parser-typechecker/src/Unison/Runtime/ANF.hs index 07cd4d1b9e..c644ca1dbf 100644 --- a/parser-typechecker/src/Unison/Runtime/ANF.hs +++ b/parser-typechecker/src/Unison/Runtime/ANF.hs @@ -1416,6 +1416,8 @@ data POp | -- STM ATOM | TFRC -- try force + | SDBL -- sandbox link list + | SDBV -- sandbox check for Values deriving (Show, Eq, Ord, Enum, Bounded) type ANormal = ABTN.Term ANormalF diff --git a/parser-typechecker/src/Unison/Runtime/ANF/Serialize.hs b/parser-typechecker/src/Unison/Runtime/ANF/Serialize.hs index 4130f86a66..786e4fd5d9 100644 --- a/parser-typechecker/src/Unison/Runtime/ANF/Serialize.hs +++ b/parser-typechecker/src/Unison/Runtime/ANF/Serialize.hs @@ -22,8 +22,8 @@ import Data.Word (Word16, Word32, Word64) import GHC.Stack import Unison.ABT.Normalized (Term (..)) import Unison.Reference (Reference, Reference' (Builtin), pattern Derived) -import Unison.Runtime.Array qualified as PA import Unison.Runtime.ANF as ANF hiding (Tag) +import Unison.Runtime.Array qualified as PA import Unison.Runtime.Exception import Unison.Runtime.Serialize import Unison.Util.EnumContainers qualified as EC @@ -618,6 +618,8 @@ pOpCode op = case op of DBTX -> 119 IXOT -> 120 IXOB -> 121 + SDBL -> 122 + SDBV -> 123 pOpAssoc :: [(POp, Word16)] pOpAssoc = map (\op -> (op, pOpCode op)) [minBound .. maxBound] diff --git a/parser-typechecker/src/Unison/Runtime/Builtin.hs b/parser-typechecker/src/Unison/Runtime/Builtin.hs index 581381e274..2dfe3306c7 100644 --- a/parser-typechecker/src/Unison/Runtime/Builtin.hs +++ b/parser-typechecker/src/Unison/Runtime/Builtin.hs @@ -690,7 +690,6 @@ splitls = binop0 4 $ \[n0, s, n, t, l, r] -> [ (0, ([], seqViewEmpty)), (1, ([BX, BX], TAbss [l, r] $ seqViewElem l r)) ] - splitrs = binop0 4 $ \[n0, s, n, t, l, r] -> unbox n0 Ty.natRef n . TLetD t UN (TPrm SPLR [n, s]) @@ -928,15 +927,17 @@ watch = raise :: SuperNormal Symbol raise = unop0 3 $ \[r, f, n, k] -> - TMatch r . flip MatchRequest (TAbs f $ TVar f) + TMatch r + . flip MatchRequest (TAbs f $ TVar f) . Map.singleton Ty.exceptionRef - $ mapSingleton 0 - ( [BX], - TAbs f - . TShift Ty.exceptionRef k - . TLetD n BX (TLit $ T "builtin.raise") - $ TPrm EROR [n, f] - ) + $ mapSingleton + 0 + ( [BX], + TAbs f + . TShift Ty.exceptionRef k + . TLetD n BX (TLit $ T "builtin.raise") + $ TPrm EROR [n, f] + ) gen'trace :: SuperNormal Symbol gen'trace = @@ -1023,6 +1024,19 @@ check'sandbox = where (refs, val, b) = fresh +sandbox'links :: SuperNormal Symbol +sandbox'links = Lambda [BX] . TAbs ln $ TPrm SDBL [ln] + where + ln = fresh1 + +value'sandbox :: SuperNormal Symbol +value'sandbox = + Lambda [BX, BX] + . TAbss [refs, val] + $ TPrm SDBV [refs, val] + where + (refs, val) = fresh + stm'atomic :: SuperNormal Symbol stm'atomic = Lambda [BX] @@ -2168,6 +2182,8 @@ builtinLookup = ("Link.Term.toText", (Untracked, term'link'to'text)), ("STM.atomically", (Tracked, stm'atomic)), ("validateSandboxed", (Untracked, check'sandbox)), + ("Value.validateSandboxed", (Tracked, value'sandbox)), + ("sandboxLinks", (Tracked, sandbox'links)), ("IO.tryEval", (Tracked, try'eval)) ] ++ foreignWrappers diff --git a/parser-typechecker/src/Unison/Runtime/MCode.hs b/parser-typechecker/src/Unison/Runtime/MCode.hs index 06d9f80234..28f821f231 100644 --- a/parser-typechecker/src/Unison/Runtime/MCode.hs +++ b/parser-typechecker/src/Unison/Runtime/MCode.hs @@ -61,12 +61,12 @@ import Unison.Runtime.ANF internalBug, packTags, pattern TApp, + pattern TBLit, pattern TFOp, pattern TFrc, pattern THnd, pattern TLets, pattern TLit, - pattern TBLit, pattern TMatch, pattern TName, pattern TPrm, @@ -390,6 +390,7 @@ data BPrim1 | TLTT -- value, Term.Link.toText -- debug | DBTX -- debug text + | SDBL -- sandbox link list deriving (Show, Eq, Ord) data BPrim2 @@ -424,6 +425,7 @@ data BPrim2 | TRCE -- trace -- code | SDBX -- sandbox + | SDBV -- sandbox Value deriving (Show, Eq, Ord) data MLit @@ -859,7 +861,7 @@ emitSection _ _ _ _ ctx (TLit l) = | ANF.LY {} <- l = addCount 0 1 | otherwise = addCount 1 0 emitSection _ _ _ _ ctx (TBLit l) = - addCount 0 1 . countCtx ctx . Ins (emitBLit l) . Yield $ BArg1 0 + addCount 0 1 . countCtx ctx . Ins (emitBLit l) . Yield $ BArg1 0 emitSection rns grpr grpn rec ctx (TMatch v bs) | Just (i, BX) <- ctxResolve ctx v, MatchData r cs df <- bs = @@ -1040,7 +1042,6 @@ emitLet _ _ _ _ _ _ _ (TLit l) = fmap (Ins $ emitLit l) emitLet _ _ _ _ _ _ _ (TBLit l) = fmap (Ins $ emitBLit l) - -- emitLet rns grp _ _ _ ctx (TApp (FComb r) args) -- -- We should be able to tell if we are making a saturated call -- -- or not here. We aren't carrying the information here yet, though. @@ -1190,6 +1191,8 @@ emitPOp ANF.CVLD = emitBP1 CVLD emitPOp ANF.LOAD = emitBP1 LOAD emitPOp ANF.VALU = emitBP1 VALU emitPOp ANF.SDBX = emitBP2 SDBX +emitPOp ANF.SDBL = emitBP1 SDBL +emitPOp ANF.SDBV = emitBP2 SDBV -- error call emitPOp ANF.EROR = emitBP2 THRO emitPOp ANF.TRCE = emitBP2 TRCE @@ -1553,7 +1556,7 @@ prettySection ind sec = . prettySection (ind + 1) pu . foldr (\p r -> rqc p . r) id (mapToList bs) where - rqc (i , e) = + rqc (i, e) = showString "\n" . shows i . showString " ->\n" diff --git a/parser-typechecker/src/Unison/Runtime/Machine.hs b/parser-typechecker/src/Unison/Runtime/Machine.hs index d15723016a..5850517fb7 100644 --- a/parser-typechecker/src/Unison/Runtime/Machine.hs +++ b/parser-typechecker/src/Unison/Runtime/Machine.hs @@ -28,8 +28,13 @@ import Unison.Builtin.Decls (exceptionRef, ioFailureRef) import Unison.Builtin.Decls qualified as Rf import Unison.ConstructorReference qualified as CR import Unison.Prelude hiding (Text) -import Unison.Reference (Reference, Reference' (Builtin), toShortHash) -import Unison.Referent (pattern Con, pattern Ref) +import Unison.Reference + ( Reference, + Reference' (Builtin), + isBuiltin, + toShortHash, + ) +import Unison.Referent (Referent, pattern Con, pattern Ref) import Unison.Runtime.ANF as ANF ( CompileExn (..), Mem (..), @@ -388,6 +393,14 @@ exec !env !denv !_activeThreads !ustk !bstk !k _ (BPrim1 DBTX i) bstk <- bump bstk bstk <$ pokeBi bstk (Util.Text.pack tx) pure (denv, ustk, bstk, k) +exec !env !denv !_activeThreads !ustk !bstk !k _ (BPrim1 SDBL i) + | sandboxed env = + die "attempted to use sandboxed operation: sandboxLinks" + | otherwise = do + tl <- peekOffBi bstk i + bstk <- bump bstk + pokeS bstk . encodeSandboxListResult =<< sandboxList env tl + pure (denv, ustk, bstk, k) exec !_ !denv !_activeThreads !ustk !bstk !k _ (BPrim1 op i) = do (ustk, bstk) <- bprim1 ustk bstk op i pure (denv, ustk, bstk, k) @@ -399,6 +412,17 @@ exec !env !denv !_activeThreads !ustk !bstk !k _ (BPrim2 SDBX i j) = do ustk <- bump ustk poke ustk $ if b then 1 else 0 pure (denv, ustk, bstk, k) +exec !env !denv !_activeThreads !ustk !bstk !k _ (BPrim2 SDBV i j) + | sandboxed env = + die "attempted to use sandboxed operation: Value.validateSandboxed" + | otherwise = do + s <- peekOffS bstk i + v <- peekOffBi bstk j + l <- decodeSandboxArgument s + res <- checkValueSandboxing env l v + bstk <- bump bstk + poke bstk $ encodeSandboxResult res + pure (denv, ustk, bstk, k) exec !_ !denv !_activeThreads !ustk !bstk !k _ (BPrim2 EQLU i j) = do x <- peekOff bstk i y <- peekOff bstk j @@ -1576,6 +1600,7 @@ bprim1 !ustk !bstk TLTT _ = pure (ustk, bstk) bprim1 !ustk !bstk LOAD _ = pure (ustk, bstk) bprim1 !ustk !bstk VALU _ = pure (ustk, bstk) bprim1 !ustk !bstk DBTX _ = pure (ustk, bstk) +bprim1 !ustk !bstk SDBL _ = pure (ustk, bstk) {-# INLINE bprim1 #-} bprim2 :: @@ -1781,6 +1806,7 @@ bprim2 !ustk !bstk THRO _ _ = pure (ustk, bstk) -- impossible bprim2 !ustk !bstk TRCE _ _ = pure (ustk, bstk) -- impossible bprim2 !ustk !bstk CMPU _ _ = pure (ustk, bstk) -- impossible bprim2 !ustk !bstk SDBX _ _ = pure (ustk, bstk) -- impossible +bprim2 !ustk !bstk SDBV _ _ = pure (ustk, bstk) -- impossible {-# INLINE bprim2 #-} yield :: @@ -1949,6 +1975,22 @@ decodeSandboxArgument s = fmap join . for (toList s) $ \case _ -> pure [] -- constructor _ -> die "decodeSandboxArgument: unrecognized value" +encodeSandboxListResult :: [Reference] -> Sq.Seq Closure +encodeSandboxListResult = + Sq.fromList . fmap (Foreign . Wrap Rf.termLinkRef . Ref) + +encodeSandboxResult :: Either [Reference] [Reference] -> Closure +encodeSandboxResult (Left rfs) = + encodeLeft . Foreign . Wrap Rf.listRef $ encodeSandboxListResult rfs +encodeSandboxResult (Right rfs) = + encodeRight . Foreign . Wrap Rf.listRef $ encodeSandboxListResult rfs + +encodeLeft :: Closure -> Closure +encodeLeft = DataB1 Rf.eitherRef leftTag + +encodeRight :: Closure -> Closure +encodeRight = DataB1 Rf.eitherRef rightTag + addRefs :: TVar Word64 -> TVar (M.Map Reference Word64) -> @@ -1992,6 +2034,12 @@ codeValidate tml cc = do extra = Foreign . Wrap Rf.textRef . Util.Text.pack $ show cs in pure . Just $ Failure ioFailureRef msg extra +sandboxList :: CCache -> Referent -> IO [Reference] +sandboxList cc (Ref r) = do + sands <- readTVarIO $ sandbox cc + pure . maybe [] S.toList $ M.lookup r sands +sandboxList _ _ = pure [] + checkSandboxing :: CCache -> [Reference] -> @@ -2007,6 +2055,31 @@ checkSandboxing cc allowed0 c = do where allowed = S.fromList allowed0 +-- Checks a Value for sandboxing. A Left result indicates that some +-- dependencies of the Value are unknown. A Right result indicates +-- builtins transitively referenced by the Value that are disallowed. +checkValueSandboxing :: + CCache -> + [Reference] -> + ANF.Value -> + IO (Either [Reference] [Reference]) +checkValueSandboxing cc allowed0 v = do + sands <- readTVarIO $ sandbox cc + have <- readTVarIO $ intermed cc + let f False r + | Nothing <- M.lookup r have, + not (isBuiltin r) = + (S.singleton r, mempty) + | Just rs <- M.lookup r sands = + (mempty, rs `S.difference` allowed) + f _ _ = (mempty, mempty) + case valueLinks f v of + (miss, sbx) + | S.null miss -> pure . Right $ S.toList sbx + | otherwise -> pure . Left $ S.toList miss + where + allowed = S.fromList allowed0 + cacheAdd0 :: S.Set Reference -> [(Reference, SuperGroup Symbol)] -> @@ -2358,6 +2431,15 @@ unitTag packTags rt 0 | otherwise = error "internal error: unitTag" +leftTag, rightTag :: Word64 +(leftTag, rightTag) + | Just n <- M.lookup Rf.eitherRef builtinTypeNumbering, + et <- toEnum (fromIntegral n), + lt <- toEnum (fromIntegral Rf.eitherLeftId), + rt <- toEnum (fromIntegral Rf.eitherRightId) = + (packTags et lt, packTags et rt) + | otherwise = error "internal error: either tags" + universalCompare :: (Foreign -> Foreign -> Ordering) -> Closure -> diff --git a/parser-typechecker/src/Unison/Runtime/Serialize.hs b/parser-typechecker/src/Unison/Runtime/Serialize.hs index 31e518a251..622fc11e79 100644 --- a/parser-typechecker/src/Unison/Runtime/Serialize.hs +++ b/parser-typechecker/src/Unison/Runtime/Serialize.hs @@ -449,6 +449,7 @@ instance Tag BPrim1 where tag2word VALU = 23 tag2word TLTT = 24 tag2word DBTX = 25 + tag2word SDBL = 26 word2tag 0 = pure SIZT word2tag 1 = pure USNC @@ -476,6 +477,7 @@ instance Tag BPrim1 where word2tag 23 = pure VALU word2tag 24 = pure TLTT word2tag 25 = pure DBTX + word2tag 26 = pure SDBL word2tag n = unknownTag "BPrim1" n instance Tag BPrim2 where @@ -504,6 +506,7 @@ instance Tag BPrim2 where tag2word SDBX = 22 tag2word IXOT = 23 tag2word IXOB = 24 + tag2word SDBV = 25 word2tag 0 = pure EQLU word2tag 1 = pure CMPU @@ -530,4 +533,5 @@ instance Tag BPrim2 where word2tag 22 = pure SDBX word2tag 23 = pure IXOT word2tag 24 = pure IXOB + word2tag 25 = pure SDBV word2tag n = unknownTag "BPrim2" n diff --git a/scheme-libs/racket/unison/boot.ss b/scheme-libs/racket/unison/boot.ss index 348f86e5b9..ec8085dcfe 100644 --- a/scheme-libs/racket/unison/boot.ss +++ b/scheme-libs/racket/unison/boot.ss @@ -20,6 +20,10 @@ data data-case + expand-sandbox + check-sandbox + set-sandbox + (struct-out unison-data) (struct-out unison-termlink) (struct-out unison-termlink-con) @@ -68,6 +72,7 @@ (only-in racket/control prompt0-at control0-at) unison/core unison/data + unison/sandbox unison/data-info unison/crypto (only-in unison/chunked-seq @@ -506,7 +511,7 @@ (match rf [(unison-data _ t (list nm)) #:when (= t unison-reference-builtin:tag) - (unison-termlink-builtin nm)] + (unison-termlink-builtin (chunked-string->string nm))] [(unison-data _ t (list id)) #:when (= t unison-reference-derived:tag) (match id diff --git a/scheme-libs/racket/unison/data.ss b/scheme-libs/racket/unison/data.ss index 38816f5cbe..184991eb7f 100644 --- a/scheme-libs/racket/unison/data.ss +++ b/scheme-libs/racket/unison/data.ss @@ -9,6 +9,7 @@ lookup-function-link declare-code lookup-code + have-code? (struct-out unison-data) (struct-out unison-sum) @@ -120,7 +121,42 @@ ; something that allows us to distinguish it as builtin. (struct unison-termlink () #:transparent - #:reflection-name 'termlink) + #:reflection-name 'termlink + #:property prop:equal+hash + (let () + (define (equal-proc lnl lnr rec) + (match lnl + [(unison-termlink-con r i) + (match lnr + [(unison-termlink-con l j) + (and (rec r l) (= i j))] + [else #f])] + [(unison-termlink-builtin l) + (match lnr + [(unison-termlink-builtin r) + (equal? l r)] + [else #f])] + [(unison-termlink-derived hl i) + (match lnr + [(unison-termlink-derived hr j) + (and (equal? hl hr) (= i j))] + [else #f])])) + + (define ((hash-proc init) ln rec) + (match ln + [(unison-termlink-con r i) + (fxxor (fx*/wraparound (rec r) 29) + (fx*/wraparound (rec i) 23) + (fx*/wraparound init 17))] + [(unison-termlink-builtin n) + (fxxor (fx*/wraparound (rec n) 31) + (fx*/wraparound init 13))] + [(unison-termlink-derived hl i) + (fxxor (fx*/wraparound (rec hl) 37) + (fx*/wraparound (rec i) 41) + (fx*/wraparound init 7))])) + + (list equal-proc (hash-proc 3) (hash-proc 5)))) (struct unison-termlink-con unison-termlink (ref index) @@ -299,6 +335,9 @@ (sum 0) (sum 1 mco)))) +(define (have-code? hs) + (hash-has-key? code-associations hs)) + (define (unison-tuple->list t) (let ([fs (unison-data-fields t)]) (cond diff --git a/scheme-libs/racket/unison/primops-generated.rkt b/scheme-libs/racket/unison/primops-generated.rkt index 21a45334da..434314af2d 100644 --- a/scheme-libs/racket/unison/primops-generated.rkt +++ b/scheme-libs/racket/unison/primops-generated.rkt @@ -20,8 +20,16 @@ builtin-Value.value:termlink builtin-Value.reflect builtin-Value.reflect:termlink + builtin-Code.isMissing + builtin-Code.isMissing:termlink builtin-Code.lookup builtin-Code.lookup:termlink + builtin-validateSandboxed + builtin-validateSandboxed:termlink + builtin-Value.validateSandboxed + builtin-Value.validateSandboxed:termlink + builtin-sandboxLinks + builtin-sandboxLinks:termlink builtin-Code.deserialize:termlink builtin-Code.serialize:termlink @@ -37,6 +45,7 @@ (define-builtin-link builtin-Value.value) (define-builtin-link builtin-Value.reflect) +(define-builtin-link builtin-Code.isMissing) (define-builtin-link builtin-Code.lookup) (define-builtin-link builtin-Code.deserialize) @@ -46,6 +55,9 @@ (define-builtin-link builtin-Value.serialize) (define-builtin-link builtin-crypto.hash) (define-builtin-link builtin-crypto.hmac) +(define-builtin-link builtin-validateSandboxed) +(define-builtin-link builtin-Value.validateSandboxed) +(define-builtin-link builtin-sandboxLinks) (define (chunked-list->list cl) (vector->list (chunked-list->vector cl))) @@ -348,6 +360,52 @@ t (list->chunked-list (map reflect-value fs)))])) +(define (check-sandbox-ok ok l) + (remove* ok (check-sandbox l))) + +(define (sandbox-proc ok f) + (check-sandbox-ok ok (lookup-function-link f))) + +(define (sandbox-scheme-value ok v) + (match v + [(? chunked-list?) + (for/fold ([acc '()]) ([e (in-chunked-list v)]) + (append (sandbox-value ok e) acc))] + [(unison-closure f as) + (for/fold ([acc (sandbox-proc ok f)]) ([a (in-list as)]) + (append (sandbox-scheme-value ok a) acc))] + [(? procedure?) (sandbox-proc ok v)] + [(unison-data rf t fs) + (for/fold ([acc '()]) ([e (in-list fs)]) + (append (sandbox-scheme-value ok e) acc))] + [else '()])) + +(define (check-known l acc) + (if (need-dependency? l) (cons l acc) acc)) + +; check sandboxing information for an internal.runtime.Value +(define (sandbox-value ok v) + (for/fold + ([sdbx '()] + [unkn '()] + + #:result + (if (null? unkn) + (unison-either-right (list->chunked-list sdbx)) + (unison-either-left (list->chunked-list unkn)))) + + ([r (in-chunked-list (value-term-dependencies v))]) + + (let ([l (reference->termlink r)]) + (values + (append (check-sandbox-ok ok l) sdbx) + (check-known l unkn))))) + +; check sandboxing information for a reflection.Value +(define (sandbox-quoted ok qv) + (match qv + [(unison-quote v) (sandbox-value ok v)])) + ; replacment for Value.unsafeValue : a -> Value (define-unison (builtin-Value.reflect v) @@ -429,13 +487,9 @@ (hash-set! runtime-module-map bs mname)))) links)) -(define (need-dependency? d) - (data-case d - [0 (tx) #f] ; builtin - [1 (id) - (data-case id - [0 (bs i) - (not (hash-has-key? runtime-module-map bs))])])) +(define (need-dependency? l) + (let ([ln (if (unison-data? l) (reference->termlink l) l)]) + (and (unison-termlink-derived? ln) (not (have-code? ln))))) (define (resolve-proc gr) (sum-case (decode-ref (group-reference gr)) @@ -464,32 +518,35 @@ runtime-namespace))) (define (code-dependencies co) - (group-term-dependencies (unison-code-rep co))) + (chunked-list->list + (group-term-dependencies + (unison-code-rep co)))) (define (unison-POp-CACH dfns0) - (define (flat-map f l) - (foldl - (lambda (x acc) - (append (chunked-list->list (f (usnd x))) acc)) - '() - l)) + (define (map-links dss) + (map (lambda (ds) (map reference->termlink ds)) dss)) (let ([udefs (chunked-list->list dfns0)]) (cond [(not (null? udefs)) (let* ([links (map ufst udefs)] [refs (map termlink->reference links)] - [deps (flat-map code-dependencies udefs)] + [depss (map (compose code-dependencies usnd) udefs)] + [deps (flatten depss)] [fdeps (filter need-dependency? deps)] [rdeps (remove* refs fdeps)]) - (if (null? rdeps) - (let ([sdefs (flatten (map gen-code udefs))] - [mname (generate-module-name links)]) - (register-code udefs) - (add-module-associations links mname) - (add-runtime-module mname links sdefs) - (sum 0 '())) - (sum 1 (list->chunked-list rdeps))))] + (cond + [(null? fdeps) (sum 0 '())] + [(null? rdeps) + (let ([sdefs (flatten (map gen-code udefs))] + [mname (generate-module-name links)]) + (expand-sandbox links (map-links depss)) + (register-code udefs) + (add-module-associations links mname) + (add-runtime-module mname links sdefs) + (sum 0 '()))] + [else + (sum 1 (list->chunked-list rdeps))]))] [else (sum 0 '())]))) (define (unison-POp-LOAD v0) @@ -507,3 +564,21 @@ (match (lookup-code tl) [(unison-sum 0 (list)) unison-optional-none] [(unison-sum 1 (list co)) (unison-optional-some co)])) + +(define-unison (builtin-validateSandboxed ok v) + (let ([l (sandbox-scheme-value (chunked-list->list ok) v)]) + (if (null? l) + unison-boolean-true + unison-boolean-false))) + +(define-unison (builtin-sandboxLinks tl) (check-sandbox tl)) + +(define-unison (builtin-Code.isMissing tl) + (cond + [(unison-termlink-builtin? tl) unison-boolean-false] + [(unison-termlink-con? tl) unison-boolean-false] + [(have-code? tl) unison-boolean-true] + [else unison-boolean-false])) + +(define-unison (builtin-Value.validateSandboxed ok v) + (sandbox-quoted (chunked-list->list ok) v)) diff --git a/scheme-libs/racket/unison/sandbox.rkt b/scheme-libs/racket/unison/sandbox.rkt new file mode 100644 index 0000000000..d1e634f06d --- /dev/null +++ b/scheme-libs/racket/unison/sandbox.rkt @@ -0,0 +1,166 @@ + +#!racket/base + +(provide expand-sandbox check-sandbox set-sandbox) + +(require racket racket/hash) +(require (except-in unison/data true false unit)) + +; sandboxing information +(define sandbox-links (make-hash)) + +; look up the 'sensitive' sandbox links associated with a given link +(define (check-sandbox ln) + (hash-ref sandbox-links ln '())) + +(define (expand build have ds) + (define (check d) + (hash-ref build d (lambda () (check-sandbox d)))) + + (for/fold ([acc '()]) ([d ds]) + (append (remove* have (check d)) acc))) + +; Add a link to the sandboxing information. +; deps0 should be the immediate dependencies of the code for ln. +; They will be used to generate the overall sandboxing +(define (expand-sandbox ls dss) + (let rec ([build (make-immutable-hash)]) + (for/fold + ([new (make-immutable-hash)] + + #:result + (if (hash-empty? new) + ; set the newly found links + (hash-union! sandbox-links build #:combine append) + (rec (hash-union build new #:combine append)))) + + ([l ls] [ds dss]) + (let ([xp (expand build (hash-ref build l '()) ds)]) + (if (not (null? xp)) + (hash-set new l xp) + new))))) + +(define (set-sandbox link links) + (hash-set! sandbox-links link links)) + +(define (sandbox-builtin name) + (let ([ln (unison-termlink-builtin name)]) + (set-sandbox ln (list ln)))) + +(sandbox-builtin "Debug.watch") +(sandbox-builtin "Debug.trace") +(sandbox-builtin "Debug.toText") +(sandbox-builtin "IO.forkComp.v2") +(sandbox-builtin "Code.isMissing") +(sandbox-builtin "Code.cache_") +(sandbox-builtin "Code.lookup") +(sandbox-builtin "Code.validate") +(sandbox-builtin "Value.load") +(sandbox-builtin "Value.value") +(sandbox-builtin "STM.atomically") +(sandbox-builtin "IO.tryEval") +(sandbox-builtin "IO.openFile.impl.v3") +(sandbox-builtin "IO.closeFile.impl.v3") +(sandbox-builtin "IO.isFileEOF.impl.v3") +(sandbox-builtin "IO.isFileOpen.impl.v3") +(sandbox-builtin "IO.getEcho.impl.v1") +(sandbox-builtin "IO.ready.impl.v1") +(sandbox-builtin "IO.getChar.impl.v1") +(sandbox-builtin "IO.isSeekable.impl.v3") +(sandbox-builtin "IO.seekHandle.impl.v3") +(sandbox-builtin "IO.handlePosition.impl.v3") +(sandbox-builtin "IO.getBuffering.impl.v3") +(sandbox-builtin "IO.setBuffering.impl.v3") +(sandbox-builtin "IO.setEcho.impl.v1") +(sandbox-builtin "IO.getLine.impl.v1") +(sandbox-builtin "IO.getBytes.impl.v3") +(sandbox-builtin "IO.getSomeBytes.impl.v1") +(sandbox-builtin "IO.putBytes.impl.v3") +(sandbox-builtin "IO.systemTime.impl.v3") +(sandbox-builtin "IO.systemTimeMicroseconds.v1") +(sandbox-builtin "Clock.internals.monotonic.v1") +(sandbox-builtin "Clock.internals.realtime.v1") +(sandbox-builtin "Clock.internals.processCPUTime.v1") +(sandbox-builtin "Clock.internals.threadCPUTime.v1") +(sandbox-builtin "Clock.internals.sec.v1") +(sandbox-builtin "Clock.internals.nsec.v1") +(sandbox-builtin "Clock.internals.systemTimeZone.v1") +(sandbox-builtin "IO.getTempDirectory.impl.v3") +(sandbox-builtin "IO.createTempDirectory.impl.v3") +(sandbox-builtin "IO.getCurrentDirectory.impl.v3") +(sandbox-builtin "IO.setCurrentDirectory.impl.v3") +(sandbox-builtin "IO.fileExists.impl.v3") +(sandbox-builtin "IO.getEnv.impl.v1") +(sandbox-builtin "IO.getArgs.impl.v1") +(sandbox-builtin "IO.isDirectory.impl.v3") +(sandbox-builtin "IO.createDirectory.impl.v3") +(sandbox-builtin "IO.removeDirectory.impl.v3") +(sandbox-builtin "IO.renameDirectory.impl.v3") +(sandbox-builtin "IO.directoryContents.impl.v3") +(sandbox-builtin "IO.removeFile.impl.v3") +(sandbox-builtin "IO.renameFile.impl.v3") +(sandbox-builtin "IO.getFileTimestamp.impl.v3") +(sandbox-builtin "IO.getFileSize.impl.v3") +(sandbox-builtin "IO.serverSocket.impl.v3") +(sandbox-builtin "Socket.toText") +(sandbox-builtin "Handle.toText") +(sandbox-builtin "ThreadId.toText") +(sandbox-builtin "IO.socketPort.impl.v3") +(sandbox-builtin "IO.listen.impl.v3") +(sandbox-builtin "IO.clientSocket.impl.v3") +(sandbox-builtin "IO.closeSocket.impl.v3") +(sandbox-builtin "IO.socketAccept.impl.v3") +(sandbox-builtin "IO.socketSend.impl.v3") +(sandbox-builtin "IO.socketReceive.impl.v3") +(sandbox-builtin "IO.kill.impl.v3") +(sandbox-builtin "IO.delay.impl.v3") +(sandbox-builtin "IO.stdHandle") +(sandbox-builtin "IO.process.call") +(sandbox-builtin "IO.process.start") +(sandbox-builtin "IO.process.kill") +(sandbox-builtin "IO.process.wait") +(sandbox-builtin "IO.process.exitCode") +(sandbox-builtin "MVar.new") +(sandbox-builtin "MVar.newEmpty.v2") +(sandbox-builtin "MVar.take.impl.v3") +(sandbox-builtin "MVar.tryTake") +(sandbox-builtin "MVar.put.impl.v3") +(sandbox-builtin "MVar.tryPut.impl.v3") +(sandbox-builtin "MVar.swap.impl.v3") +(sandbox-builtin "MVar.isEmpty") +(sandbox-builtin "MVar.read.impl.v3") +(sandbox-builtin "MVar.tryRead.impl.v3") +(sandbox-builtin "Tls.ClientConfig.default") +(sandbox-builtin "Tls.ServerConfig.default") +(sandbox-builtin "Tls.ClientConfig.certificates.set") +(sandbox-builtin "Tls.ServerConfig.certificates.set") +(sandbox-builtin "TVar.new") +(sandbox-builtin "TVar.read") +(sandbox-builtin "TVar.write") +(sandbox-builtin "TVar.newIO") +(sandbox-builtin "TVar.readIO") +(sandbox-builtin "TVar.swap") +(sandbox-builtin "STM.retry") +(sandbox-builtin "IO.ref") +(sandbox-builtin "Ref.readForCas") +(sandbox-builtin "Ref.Ticket.read") +(sandbox-builtin "Ref.cas") +(sandbox-builtin "Promise.new") +(sandbox-builtin "Promise.read") +(sandbox-builtin "Promise.tryRead") +(sandbox-builtin "Promise.write") +(sandbox-builtin "Tls.newClient.impl.v3") +(sandbox-builtin "Tls.newServer.impl.v3") +(sandbox-builtin "Tls.handshake.impl.v3") +(sandbox-builtin "Tls.send.impl.v3") +(sandbox-builtin "Tls.decodeCert.impl.v3") +(sandbox-builtin "Tls.encodeCert") +(sandbox-builtin "Tls.decodePrivateKey") +(sandbox-builtin "Tls.encodePrivateKey") +(sandbox-builtin "Tls.receive.impl.v3") +(sandbox-builtin "Tls.terminate.impl.v3") +(sandbox-builtin "IO.randomBytes") +(sandbox-builtin "IO.array") +(sandbox-builtin "IO.arrayOf") +(sandbox-builtin "IO.bytearray") +(sandbox-builtin "IO.bytearrayOf") diff --git a/unison-cli/src/Unison/JitInfo.hs b/unison-cli/src/Unison/JitInfo.hs index 7bac2e4ac2..3c69c793a9 100644 --- a/unison-cli/src/Unison/JitInfo.hs +++ b/unison-cli/src/Unison/JitInfo.hs @@ -1,4 +1,4 @@ module Unison.JitInfo (currentRelease) where currentRelease :: String -currentRelease = "releases/0.0.7" +currentRelease = "releases/0.0.8" diff --git a/unison-src/builtin-tests/interpreter-tests.md b/unison-src/builtin-tests/interpreter-tests.md index ac0d5c42f4..b27b0ab226 100644 --- a/unison-src/builtin-tests/interpreter-tests.md +++ b/unison-src/builtin-tests/interpreter-tests.md @@ -74,6 +74,12 @@ to `Tests.check` and `Tests.checkEqual`). .> add ``` +```ucm:hide +.> alias.term ##Value.validateSandboxed Value.validateSandboxed +.> load unison-src/builtin-tests/sandbox-tests.u +.> add +``` + ```ucm:hide .> load unison-src/builtin-tests/tests.u .> add diff --git a/unison-src/builtin-tests/jit-tests.md b/unison-src/builtin-tests/jit-tests.md index 8de1629a7f..073e31addb 100644 --- a/unison-src/builtin-tests/jit-tests.md +++ b/unison-src/builtin-tests/jit-tests.md @@ -76,6 +76,12 @@ to `Tests.check` and `Tests.checkEqual`). .> add ``` +```ucm:hide +.> alias.term ##Value.validateSandboxed Value.validateSandboxed +.> load unison-src/builtin-tests/sandbox-tests.u +.> add +``` + ```ucm:hide .> load unison-src/builtin-tests/tests.u .> add diff --git a/unison-src/builtin-tests/sandbox-tests.u b/unison-src/builtin-tests/sandbox-tests.u new file mode 100644 index 0000000000..97b83a9b42 --- /dev/null +++ b/unison-src/builtin-tests/sandbox-tests.u @@ -0,0 +1,60 @@ + +sandbox.check ok name a k = + match Value.validateSandboxed ok (value a) with + Left _ -> Tests.fail name "unknown dependencies" + Right [] -> k true + Right _ -> k false + +sandbox.checkSafe name a = + sandbox.check [] name a cases + true -> Tests.pass (name ++ " safe") + false -> Tests.fail name "unexpectedly unsafe" + +sandbox.checkUnsafe name a = + sandbox.check [] name a cases + true -> Tests.fail name "unexpectedly safe" + false -> Tests.pass (name ++ " unsafe") + +sandbox.checkAllowed name ok a = + sandbox.check ok name a cases + true -> Tests.pass (name ++ " allowed") + false -> Tests.fail name "unexpected disallowed" + +sandbox.directory = + "unison-src/transcripts-using-base/serialized-cases/" + +sandbox.file = FilePath (directory ++ "case-04.v4.ser") + +sandbox.open1 = do + _ = FilePath.open + () + +sandbox.open2 = do + !open1 + +serial.checkLoaded : '{IO, Tests, Exception} () +serial.checkLoaded = do + input = FilePath.readFile sandbox.file + match fromBase32 input with + Left msg -> raiseFailure msg input + Right bs -> + (deps, v) = loadValueBytes bs + + _ = cache_ deps + match Value.load v with + Left l -> raiseFailure "value missing deps" l + Right (f, _) -> checkUnsafe "loaded" f + +sandbox.tests = do + checkSafe "5" 5 + checkSafe "5.0" 5.0 + checkSafe "\"\"" "" + checkSafe "0xs1337" 0xs1337 + checkSafe "List.map" List.map + checkUnsafe "FilePath.open" FilePath.open + checkUnsafe "sandbox.open1" sandbox.open1 + checkUnsafe "sandbox.open2" sandbox.open2 + checkUnsafe "Code.cache_" Code.cache_ + checkAllowed "FilePath.open" [termLink FilePath.open.impl] FilePath.open + checkAllowed "Code.cache_" [termLink Code.cache_] Code.cache_ + !checkLoaded diff --git a/unison-src/builtin-tests/serial-tests.u b/unison-src/builtin-tests/serial-tests.u index 56ec3fbcc8..5e6afe8961 100644 --- a/unison-src/builtin-tests/serial-tests.u +++ b/unison-src/builtin-tests/serial-tests.u @@ -11,7 +11,7 @@ serial.availableCases _ = slice = cases (FilePath nm) -> Text.take (Text.size nm - 7) nm -- caseNums = ["00", "01", "02", "03"] - caseNums = ["00", "02"] + caseNums = ["00", "02", "04"] files = map (n -> FilePath ("case-" ++ n ++ ".v4.ser")) caseNums map slice (filter p files) diff --git a/unison-src/builtin-tests/tests.u b/unison-src/builtin-tests/tests.u index 22919dced0..4fbbab5c48 100644 --- a/unison-src/builtin-tests/tests.u +++ b/unison-src/builtin-tests/tests.u @@ -15,6 +15,7 @@ tests = Tests.main do !bytes.tests !array.tests !codelookup.tests + !sandbox.tests crypto.hash.tests = do diff --git a/unison-src/transcripts-using-base/all-base-hashes.output.md b/unison-src/transcripts-using-base/all-base-hashes.output.md index 3e6e7006cd..c50fa1d624 100644 --- a/unison-src/transcripts-using-base/all-base-hashes.output.md +++ b/unison-src/transcripts-using-base/all-base-hashes.output.md @@ -1470,312 +1470,320 @@ This transcript is intended to make visible accidental changes to the hashing al 423. -- #vph2eas3lf2gi259f3khlrspml3id2l8u0ru07kb5fd833h238jk4iauju0b6decth9i3nao5jkf5eej1e1kovgmu5tghhh8jq3i7p8 unique type builtin.io2.RuntimeFailure - 424. -- #1bca3hq98sfgr6a4onuon1tsda69cdjggq8pkmlsfola6492dbrih5up6dv18ptfbqeocm9q6parf64pj773p7p19qe76238o4trc40 + 424. -- ##sandboxLinks + builtin.io2.sandboxLinks : Link.Term ->{IO} [Link.Term] + + 425. -- #1bca3hq98sfgr6a4onuon1tsda69cdjggq8pkmlsfola6492dbrih5up6dv18ptfbqeocm9q6parf64pj773p7p19qe76238o4trc40 unique type builtin.io2.SeekMode - 425. -- #1bca3hq98sfgr6a4onuon1tsda69cdjggq8pkmlsfola6492dbrih5up6dv18ptfbqeocm9q6parf64pj773p7p19qe76238o4trc40#0 + 426. -- #1bca3hq98sfgr6a4onuon1tsda69cdjggq8pkmlsfola6492dbrih5up6dv18ptfbqeocm9q6parf64pj773p7p19qe76238o4trc40#0 builtin.io2.SeekMode.AbsoluteSeek : SeekMode - 426. -- #1bca3hq98sfgr6a4onuon1tsda69cdjggq8pkmlsfola6492dbrih5up6dv18ptfbqeocm9q6parf64pj773p7p19qe76238o4trc40#1 + 427. -- #1bca3hq98sfgr6a4onuon1tsda69cdjggq8pkmlsfola6492dbrih5up6dv18ptfbqeocm9q6parf64pj773p7p19qe76238o4trc40#1 builtin.io2.SeekMode.RelativeSeek : SeekMode - 427. -- #1bca3hq98sfgr6a4onuon1tsda69cdjggq8pkmlsfola6492dbrih5up6dv18ptfbqeocm9q6parf64pj773p7p19qe76238o4trc40#2 + 428. -- #1bca3hq98sfgr6a4onuon1tsda69cdjggq8pkmlsfola6492dbrih5up6dv18ptfbqeocm9q6parf64pj773p7p19qe76238o4trc40#2 builtin.io2.SeekMode.SeekFromEnd : SeekMode - 428. -- ##Socket + 429. -- ##Socket builtin type builtin.io2.Socket - 429. -- #121tku5rfh21t247v1cakhd6ir44fakkqsm799rrfp5qcjdls4nvdu4r3nco80stdd86tdo2hhh0ulcpoaofnrnkjun04kqnfmjqio8 + 430. -- #121tku5rfh21t247v1cakhd6ir44fakkqsm799rrfp5qcjdls4nvdu4r3nco80stdd86tdo2hhh0ulcpoaofnrnkjun04kqnfmjqio8 unique type builtin.io2.StdHandle - 430. -- #121tku5rfh21t247v1cakhd6ir44fakkqsm799rrfp5qcjdls4nvdu4r3nco80stdd86tdo2hhh0ulcpoaofnrnkjun04kqnfmjqio8#2 + 431. -- #121tku5rfh21t247v1cakhd6ir44fakkqsm799rrfp5qcjdls4nvdu4r3nco80stdd86tdo2hhh0ulcpoaofnrnkjun04kqnfmjqio8#2 builtin.io2.StdHandle.StdErr : StdHandle - 431. -- #121tku5rfh21t247v1cakhd6ir44fakkqsm799rrfp5qcjdls4nvdu4r3nco80stdd86tdo2hhh0ulcpoaofnrnkjun04kqnfmjqio8#0 + 432. -- #121tku5rfh21t247v1cakhd6ir44fakkqsm799rrfp5qcjdls4nvdu4r3nco80stdd86tdo2hhh0ulcpoaofnrnkjun04kqnfmjqio8#0 builtin.io2.StdHandle.StdIn : StdHandle - 432. -- #121tku5rfh21t247v1cakhd6ir44fakkqsm799rrfp5qcjdls4nvdu4r3nco80stdd86tdo2hhh0ulcpoaofnrnkjun04kqnfmjqio8#1 + 433. -- #121tku5rfh21t247v1cakhd6ir44fakkqsm799rrfp5qcjdls4nvdu4r3nco80stdd86tdo2hhh0ulcpoaofnrnkjun04kqnfmjqio8#1 builtin.io2.StdHandle.StdOut : StdHandle - 433. -- ##STM + 434. -- ##STM builtin type builtin.io2.STM - 434. -- ##STM.atomically + 435. -- ##STM.atomically builtin.io2.STM.atomically : '{STM} a ->{IO} a - 435. -- ##STM.retry + 436. -- ##STM.retry builtin.io2.STM.retry : '{STM} a - 436. -- #cggbdfff21ac5uedf4qvn4to83clinvhsovrila35u7f7e73g4l6hoj8pjmjnk713a8luhnn4bi1j9ai1nl0can1un66hvg230eog9g + 437. -- #cggbdfff21ac5uedf4qvn4to83clinvhsovrila35u7f7e73g4l6hoj8pjmjnk713a8luhnn4bi1j9ai1nl0can1un66hvg230eog9g unique type builtin.io2.STMFailure - 437. -- ##ThreadId + 438. -- ##ThreadId builtin type builtin.io2.ThreadId - 438. -- #ggh649864d9bfnk90n7kgtj7dflddc4kn8osu7u7mub8p7l8biid8dgtungj4u005h7karbgupfpum9jp94spks3ma1sgh39bhirv38 + 439. -- #ggh649864d9bfnk90n7kgtj7dflddc4kn8osu7u7mub8p7l8biid8dgtungj4u005h7karbgupfpum9jp94spks3ma1sgh39bhirv38 unique type builtin.io2.ThreadKilledFailure - 439. -- ##Tls + 440. -- ##Tls builtin type builtin.io2.Tls - 440. -- ##Tls.Cipher + 441. -- ##Tls.Cipher builtin type builtin.io2.Tls.Cipher - 441. -- ##Tls.ClientConfig + 442. -- ##Tls.ClientConfig builtin type builtin.io2.Tls.ClientConfig - 442. -- ##Tls.ClientConfig.certificates.set + 443. -- ##Tls.ClientConfig.certificates.set builtin.io2.Tls.ClientConfig.certificates.set : [SignedCert] -> ClientConfig -> ClientConfig - 443. -- ##TLS.ClientConfig.ciphers.set + 444. -- ##TLS.ClientConfig.ciphers.set builtin.io2.TLS.ClientConfig.ciphers.set : [Cipher] -> ClientConfig -> ClientConfig - 444. -- ##Tls.ClientConfig.default + 445. -- ##Tls.ClientConfig.default builtin.io2.Tls.ClientConfig.default : Text -> Bytes -> ClientConfig - 445. -- ##Tls.ClientConfig.versions.set + 446. -- ##Tls.ClientConfig.versions.set builtin.io2.Tls.ClientConfig.versions.set : [Version] -> ClientConfig -> ClientConfig - 446. -- ##Tls.decodeCert.impl.v3 + 447. -- ##Tls.decodeCert.impl.v3 builtin.io2.Tls.decodeCert.impl : Bytes -> Either Failure SignedCert - 447. -- ##Tls.decodePrivateKey + 448. -- ##Tls.decodePrivateKey builtin.io2.Tls.decodePrivateKey : Bytes -> [PrivateKey] - 448. -- ##Tls.encodeCert + 449. -- ##Tls.encodeCert builtin.io2.Tls.encodeCert : SignedCert -> Bytes - 449. -- ##Tls.encodePrivateKey + 450. -- ##Tls.encodePrivateKey builtin.io2.Tls.encodePrivateKey : PrivateKey -> Bytes - 450. -- ##Tls.handshake.impl.v3 + 451. -- ##Tls.handshake.impl.v3 builtin.io2.Tls.handshake.impl : Tls ->{IO} Either Failure () - 451. -- ##Tls.newClient.impl.v3 + 452. -- ##Tls.newClient.impl.v3 builtin.io2.Tls.newClient.impl : ClientConfig -> Socket ->{IO} Either Failure Tls - 452. -- ##Tls.newServer.impl.v3 + 453. -- ##Tls.newServer.impl.v3 builtin.io2.Tls.newServer.impl : ServerConfig -> Socket ->{IO} Either Failure Tls - 453. -- ##Tls.PrivateKey + 454. -- ##Tls.PrivateKey builtin type builtin.io2.Tls.PrivateKey - 454. -- ##Tls.receive.impl.v3 + 455. -- ##Tls.receive.impl.v3 builtin.io2.Tls.receive.impl : Tls ->{IO} Either Failure Bytes - 455. -- ##Tls.send.impl.v3 + 456. -- ##Tls.send.impl.v3 builtin.io2.Tls.send.impl : Tls -> Bytes ->{IO} Either Failure () - 456. -- ##Tls.ServerConfig + 457. -- ##Tls.ServerConfig builtin type builtin.io2.Tls.ServerConfig - 457. -- ##Tls.ServerConfig.certificates.set + 458. -- ##Tls.ServerConfig.certificates.set builtin.io2.Tls.ServerConfig.certificates.set : [SignedCert] -> ServerConfig -> ServerConfig - 458. -- ##Tls.ServerConfig.ciphers.set + 459. -- ##Tls.ServerConfig.ciphers.set builtin.io2.Tls.ServerConfig.ciphers.set : [Cipher] -> ServerConfig -> ServerConfig - 459. -- ##Tls.ServerConfig.default + 460. -- ##Tls.ServerConfig.default builtin.io2.Tls.ServerConfig.default : [SignedCert] -> PrivateKey -> ServerConfig - 460. -- ##Tls.ServerConfig.versions.set + 461. -- ##Tls.ServerConfig.versions.set builtin.io2.Tls.ServerConfig.versions.set : [Version] -> ServerConfig -> ServerConfig - 461. -- ##Tls.SignedCert + 462. -- ##Tls.SignedCert builtin type builtin.io2.Tls.SignedCert - 462. -- ##Tls.terminate.impl.v3 + 463. -- ##Tls.terminate.impl.v3 builtin.io2.Tls.terminate.impl : Tls ->{IO} Either Failure () - 463. -- ##Tls.Version + 464. -- ##Tls.Version builtin type builtin.io2.Tls.Version - 464. -- #r3gag1btclr8iclbdt68irgt8n1d1vf7agv5umke3dgdbl11acj6easav6gtihanrjnct18om07638rne9ej06u2bkv2v4l36knm2l0 + 465. -- #r3gag1btclr8iclbdt68irgt8n1d1vf7agv5umke3dgdbl11acj6easav6gtihanrjnct18om07638rne9ej06u2bkv2v4l36knm2l0 unique type builtin.io2.TlsFailure - 465. -- ##TVar + 466. -- ##TVar builtin type builtin.io2.TVar - 466. -- ##TVar.new + 467. -- ##TVar.new builtin.io2.TVar.new : a ->{STM} TVar a - 467. -- ##TVar.newIO + 468. -- ##TVar.newIO builtin.io2.TVar.newIO : a ->{IO} TVar a - 468. -- ##TVar.read + 469. -- ##TVar.read builtin.io2.TVar.read : TVar a ->{STM} a - 469. -- ##TVar.readIO + 470. -- ##TVar.readIO builtin.io2.TVar.readIO : TVar a ->{IO} a - 470. -- ##TVar.swap + 471. -- ##TVar.swap builtin.io2.TVar.swap : TVar a -> a ->{STM} a - 471. -- ##TVar.write + 472. -- ##TVar.write builtin.io2.TVar.write : TVar a -> a ->{STM} () - 472. -- ##validateSandboxed + 473. -- ##validateSandboxed builtin.io2.validateSandboxed : [Link.Term] -> a -> Boolean - 473. -- #c23jofurcegj93796o0karmkcm6baifupiuu1rtkniu74avn6a4r1n66ga5rml5di7easkgn4iak800u3tnb6kfisbrv6tcfgkb13a8 + 474. -- ##Value.validateSandboxed + builtin.io2.Value.validateSandboxed : [Link.Term] + -> Value + ->{IO} Either [Link.Term] [Link.Term] + + 475. -- #c23jofurcegj93796o0karmkcm6baifupiuu1rtkniu74avn6a4r1n66ga5rml5di7easkgn4iak800u3tnb6kfisbrv6tcfgkb13a8 unique type builtin.IsPropagated - 474. -- #c23jofurcegj93796o0karmkcm6baifupiuu1rtkniu74avn6a4r1n66ga5rml5di7easkgn4iak800u3tnb6kfisbrv6tcfgkb13a8#0 + 476. -- #c23jofurcegj93796o0karmkcm6baifupiuu1rtkniu74avn6a4r1n66ga5rml5di7easkgn4iak800u3tnb6kfisbrv6tcfgkb13a8#0 builtin.IsPropagated.IsPropagated : IsPropagated - 475. -- #q6snodsh7i7u6k7gtqj73tt7nv6htjofs5f37vg2v3dsfk6hau71fs5mcv0hq3lqg111fsvoi92mngm08850aftfgh65uka9mhqvft0 + 477. -- #q6snodsh7i7u6k7gtqj73tt7nv6htjofs5f37vg2v3dsfk6hau71fs5mcv0hq3lqg111fsvoi92mngm08850aftfgh65uka9mhqvft0 unique type builtin.IsTest - 476. -- #q6snodsh7i7u6k7gtqj73tt7nv6htjofs5f37vg2v3dsfk6hau71fs5mcv0hq3lqg111fsvoi92mngm08850aftfgh65uka9mhqvft0#0 + 478. -- #q6snodsh7i7u6k7gtqj73tt7nv6htjofs5f37vg2v3dsfk6hau71fs5mcv0hq3lqg111fsvoi92mngm08850aftfgh65uka9mhqvft0#0 builtin.IsTest.IsTest : IsTest - 477. -- #68haromionghg6cvojngjrgc7t0ob658nkk8b20fpho6k6ltjtf6rfmr4ia1omige97hk34lu21qsj933vl1dkpbna7evbjfkh71r9g + 479. -- #68haromionghg6cvojngjrgc7t0ob658nkk8b20fpho6k6ltjtf6rfmr4ia1omige97hk34lu21qsj933vl1dkpbna7evbjfkh71r9g unique type builtin.License - 478. -- #knhl4mlkqf0mt877flahlbas2ufb7bub8f11vi9ihh9uf7r6jqaglk7rm6912q1vml50866ddl0qfa4o6d7o0gomchaoae24m0u2nk8 + 480. -- #knhl4mlkqf0mt877flahlbas2ufb7bub8f11vi9ihh9uf7r6jqaglk7rm6912q1vml50866ddl0qfa4o6d7o0gomchaoae24m0u2nk8 builtin.License.copyrightHolders : License -> [CopyrightHolder] - 479. -- #ucpi54l843bf1osaejl1cnn0jt3o89fak5c0120k8256in3m80ik836hnite0osl12m91utnpnt5n7pgm3oe1rv4r1hk8ai4033agvo + 481. -- #ucpi54l843bf1osaejl1cnn0jt3o89fak5c0120k8256in3m80ik836hnite0osl12m91utnpnt5n7pgm3oe1rv4r1hk8ai4033agvo builtin.License.copyrightHolders.modify : ([CopyrightHolder] ->{g} [CopyrightHolder]) -> License ->{g} License - 480. -- #9hbbfn61d2odn8jvtj5da9n1e9decsrheg6chg73uf94oituv3750b9hd6vp3ljhi54dkp5uqfg57j66i39bstfd8ivgav4p3si39ro + 482. -- #9hbbfn61d2odn8jvtj5da9n1e9decsrheg6chg73uf94oituv3750b9hd6vp3ljhi54dkp5uqfg57j66i39bstfd8ivgav4p3si39ro builtin.License.copyrightHolders.set : [CopyrightHolder] -> License -> License - 481. -- #68haromionghg6cvojngjrgc7t0ob658nkk8b20fpho6k6ltjtf6rfmr4ia1omige97hk34lu21qsj933vl1dkpbna7evbjfkh71r9g#0 + 483. -- #68haromionghg6cvojngjrgc7t0ob658nkk8b20fpho6k6ltjtf6rfmr4ia1omige97hk34lu21qsj933vl1dkpbna7evbjfkh71r9g#0 builtin.License.License : [CopyrightHolder] -> [Year] -> LicenseType -> License - 482. -- #aqi4h1bfq2rjnrrfanf4nut8jd1elkkc00u1tn0rmt9ocsrds8i8pha7q9cihvbiq7edpg21iqnfornimae2gad0ab8ih0bksjnoi4g + 484. -- #aqi4h1bfq2rjnrrfanf4nut8jd1elkkc00u1tn0rmt9ocsrds8i8pha7q9cihvbiq7edpg21iqnfornimae2gad0ab8ih0bksjnoi4g builtin.License.licenseType : License -> LicenseType - 483. -- #1rm8kpbv278t9tqj4jfssl8q3cn4hgu1mti7bp8lhcr5h7qmojujmt9de4c31p42to8mtav61u98oad3oen8q9im20sacs69psjpugo + 485. -- #1rm8kpbv278t9tqj4jfssl8q3cn4hgu1mti7bp8lhcr5h7qmojujmt9de4c31p42to8mtav61u98oad3oen8q9im20sacs69psjpugo builtin.License.licenseType.modify : (LicenseType ->{g} LicenseType) -> License ->{g} License - 484. -- #dv9jsg0ksrlp3g0uftvkutpa8matt039o7dhat9airnkto2b703mgoi5t412hdi95pdhp9g01luga13ihmp52nk6bgh788gts6elv2o + 486. -- #dv9jsg0ksrlp3g0uftvkutpa8matt039o7dhat9airnkto2b703mgoi5t412hdi95pdhp9g01luga13ihmp52nk6bgh788gts6elv2o builtin.License.licenseType.set : LicenseType -> License -> License - 485. -- #fh5qbeba2hg5c5k9uppi71rfghj8df37p4cg3hk23b9pv0hpm67ok807f05t368rn6v99v7kvf7cp984v8ipkjr1j1h095g6nd9jtig + 487. -- #fh5qbeba2hg5c5k9uppi71rfghj8df37p4cg3hk23b9pv0hpm67ok807f05t368rn6v99v7kvf7cp984v8ipkjr1j1h095g6nd9jtig builtin.License.years : License -> [Year] - 486. -- #2samr066hti71pf0fkvb4niemm7j3amvaap3sk1dqpihqp9g8f8lknhhmjq9atai6j5kcs4huvfokvpm15ebefmfggr4hd2cetf7co0 + 488. -- #2samr066hti71pf0fkvb4niemm7j3amvaap3sk1dqpihqp9g8f8lknhhmjq9atai6j5kcs4huvfokvpm15ebefmfggr4hd2cetf7co0 builtin.License.years.modify : ([Year] ->{g} [Year]) -> License ->{g} License - 487. -- #g3ap8lg6974au4meb2hl49k1k6f048det9uckmics3bkt9s571921ksqfdsch63k2pk3fij8pn697svniakkrueddh8nkflnmjk9ffo + 489. -- #g3ap8lg6974au4meb2hl49k1k6f048det9uckmics3bkt9s571921ksqfdsch63k2pk3fij8pn697svniakkrueddh8nkflnmjk9ffo builtin.License.years.set : [Year] -> License -> License - 488. -- #uj652rrb45urfnojgt1ssqoji7iiibu27uhrc1sfl68lm54hbr7r1dpgppsv0pvf0oile2uk2h2gn1h4vgng30fga66idihhen14qc0 + 490. -- #uj652rrb45urfnojgt1ssqoji7iiibu27uhrc1sfl68lm54hbr7r1dpgppsv0pvf0oile2uk2h2gn1h4vgng30fga66idihhen14qc0 unique type builtin.LicenseType - 489. -- #uj652rrb45urfnojgt1ssqoji7iiibu27uhrc1sfl68lm54hbr7r1dpgppsv0pvf0oile2uk2h2gn1h4vgng30fga66idihhen14qc0#0 + 491. -- #uj652rrb45urfnojgt1ssqoji7iiibu27uhrc1sfl68lm54hbr7r1dpgppsv0pvf0oile2uk2h2gn1h4vgng30fga66idihhen14qc0#0 builtin.LicenseType.LicenseType : Doc -> LicenseType - 490. -- #f4b37niu61dc517c32h3os36ig34fgnt7inaaoqdbecmscchthi14gdo0vj3eee1ru746ibvl9vnmm1pglrv3125qnhsbc0i1tqtic0 + 492. -- #f4b37niu61dc517c32h3os36ig34fgnt7inaaoqdbecmscchthi14gdo0vj3eee1ru746ibvl9vnmm1pglrv3125qnhsbc0i1tqtic0 unique type builtin.Link - 491. -- ##Link.Term + 493. -- ##Link.Term builtin type builtin.Link.Term - 492. -- #f4b37niu61dc517c32h3os36ig34fgnt7inaaoqdbecmscchthi14gdo0vj3eee1ru746ibvl9vnmm1pglrv3125qnhsbc0i1tqtic0#0 + 494. -- #f4b37niu61dc517c32h3os36ig34fgnt7inaaoqdbecmscchthi14gdo0vj3eee1ru746ibvl9vnmm1pglrv3125qnhsbc0i1tqtic0#0 builtin.Link.Term : Link.Term -> Link - 493. -- ##Link.Term.toText + 495. -- ##Link.Term.toText builtin.Link.Term.toText : Link.Term -> Text - 494. -- ##Link.Type + 496. -- ##Link.Type builtin type builtin.Link.Type - 495. -- #f4b37niu61dc517c32h3os36ig34fgnt7inaaoqdbecmscchthi14gdo0vj3eee1ru746ibvl9vnmm1pglrv3125qnhsbc0i1tqtic0#1 + 497. -- #f4b37niu61dc517c32h3os36ig34fgnt7inaaoqdbecmscchthi14gdo0vj3eee1ru746ibvl9vnmm1pglrv3125qnhsbc0i1tqtic0#1 builtin.Link.Type : Type -> Link - 496. -- ##Sequence + 498. -- ##Sequence builtin type builtin.List - 497. -- ##List.++ + 499. -- ##List.++ builtin.List.++ : [a] -> [a] -> [a] - 498. -- ##List.cons + 500. -- ##List.cons builtin.List.+:, builtin.List.cons : a -> [a] -> [a] - 499. -- ##List.snoc + 501. -- ##List.snoc builtin.List.:+, builtin.List.snoc : [a] -> a -> [a] - 500. -- ##List.at + 502. -- ##List.at builtin.List.at : Nat -> [a] -> Optional a - 501. -- ##List.cons + 503. -- ##List.cons builtin.List.cons, builtin.List.+: : a -> [a] -> [a] - 502. -- ##List.drop + 504. -- ##List.drop builtin.List.drop : Nat -> [a] -> [a] - 503. -- ##List.empty + 505. -- ##List.empty builtin.List.empty : [a] - 504. -- #6frvp5jfjtt7odi9769i0p5phuuuij1fi1d9l5ncpelh416ab3vceaphhaijh0ct0v9n793j7e4h78687oij6ai97085u63m264gj5o + 506. -- #6frvp5jfjtt7odi9769i0p5phuuuij1fi1d9l5ncpelh416ab3vceaphhaijh0ct0v9n793j7e4h78687oij6ai97085u63m264gj5o builtin.List.map : (a ->{e} b) -> [a] ->{e} [b] - 505. -- ##List.size + 507. -- ##List.size builtin.List.size : [a] -> Nat - 506. -- ##List.snoc + 508. -- ##List.snoc builtin.List.snoc, builtin.List.:+ : [a] -> a -> [a] - 507. -- ##List.take + 509. -- ##List.take builtin.List.take : Nat -> [a] -> [a] - 508. -- #cb9e3iosob3e4q0v96ifmserg27samv1lvi4dh0l0l19phvct4vbbvv19abngneb77b02h8cefr1o3ad8gnm3cn6mjgsub97gjlte8g + 510. -- #cb9e3iosob3e4q0v96ifmserg27samv1lvi4dh0l0l19phvct4vbbvv19abngneb77b02h8cefr1o3ad8gnm3cn6mjgsub97gjlte8g builtin.metadata.isPropagated : IsPropagated - 509. -- #lkpne3jg56pmqegv4jba6b5nnjg86qtfllnlmtvijql5lsf89rfu6tgb1s9ic0gsqs5si0v9agmj90lk0bhihbovd5o5ve023g4ocko + 511. -- #lkpne3jg56pmqegv4jba6b5nnjg86qtfllnlmtvijql5lsf89rfu6tgb1s9ic0gsqs5si0v9agmj90lk0bhihbovd5o5ve023g4ocko builtin.metadata.isTest : IsTest - 510. -- ##MutableArray + 512. -- ##MutableArray builtin type builtin.MutableArray - 511. -- ##MutableArray.copyTo! + 513. -- ##MutableArray.copyTo! builtin.MutableArray.copyTo! : MutableArray g a -> Nat -> MutableArray g a @@ -1783,34 +1791,34 @@ This transcript is intended to make visible accidental changes to the hashing al -> Nat ->{g, Exception} () - 512. -- ##MutableArray.freeze + 514. -- ##MutableArray.freeze builtin.MutableArray.freeze : MutableArray g a -> Nat -> Nat ->{g} ImmutableArray a - 513. -- ##MutableArray.freeze! + 515. -- ##MutableArray.freeze! builtin.MutableArray.freeze! : MutableArray g a ->{g} ImmutableArray a - 514. -- ##MutableArray.read + 516. -- ##MutableArray.read builtin.MutableArray.read : MutableArray g a -> Nat ->{g, Exception} a - 515. -- ##MutableArray.size + 517. -- ##MutableArray.size builtin.MutableArray.size : MutableArray g a -> Nat - 516. -- ##MutableArray.write + 518. -- ##MutableArray.write builtin.MutableArray.write : MutableArray g a -> Nat -> a ->{g, Exception} () - 517. -- ##MutableByteArray + 519. -- ##MutableByteArray builtin type builtin.MutableByteArray - 518. -- ##MutableByteArray.copyTo! + 520. -- ##MutableByteArray.copyTo! builtin.MutableByteArray.copyTo! : MutableByteArray g -> Nat -> MutableByteArray g @@ -1818,720 +1826,720 @@ This transcript is intended to make visible accidental changes to the hashing al -> Nat ->{g, Exception} () - 519. -- ##MutableByteArray.freeze + 521. -- ##MutableByteArray.freeze builtin.MutableByteArray.freeze : MutableByteArray g -> Nat -> Nat ->{g} ImmutableByteArray - 520. -- ##MutableByteArray.freeze! + 522. -- ##MutableByteArray.freeze! builtin.MutableByteArray.freeze! : MutableByteArray g ->{g} ImmutableByteArray - 521. -- ##MutableByteArray.read16be + 523. -- ##MutableByteArray.read16be builtin.MutableByteArray.read16be : MutableByteArray g -> Nat ->{g, Exception} Nat - 522. -- ##MutableByteArray.read24be + 524. -- ##MutableByteArray.read24be builtin.MutableByteArray.read24be : MutableByteArray g -> Nat ->{g, Exception} Nat - 523. -- ##MutableByteArray.read32be + 525. -- ##MutableByteArray.read32be builtin.MutableByteArray.read32be : MutableByteArray g -> Nat ->{g, Exception} Nat - 524. -- ##MutableByteArray.read40be + 526. -- ##MutableByteArray.read40be builtin.MutableByteArray.read40be : MutableByteArray g -> Nat ->{g, Exception} Nat - 525. -- ##MutableByteArray.read64be + 527. -- ##MutableByteArray.read64be builtin.MutableByteArray.read64be : MutableByteArray g -> Nat ->{g, Exception} Nat - 526. -- ##MutableByteArray.read8 + 528. -- ##MutableByteArray.read8 builtin.MutableByteArray.read8 : MutableByteArray g -> Nat ->{g, Exception} Nat - 527. -- ##MutableByteArray.size + 529. -- ##MutableByteArray.size builtin.MutableByteArray.size : MutableByteArray g -> Nat - 528. -- ##MutableByteArray.write16be + 530. -- ##MutableByteArray.write16be builtin.MutableByteArray.write16be : MutableByteArray g -> Nat -> Nat ->{g, Exception} () - 529. -- ##MutableByteArray.write32be + 531. -- ##MutableByteArray.write32be builtin.MutableByteArray.write32be : MutableByteArray g -> Nat -> Nat ->{g, Exception} () - 530. -- ##MutableByteArray.write64be + 532. -- ##MutableByteArray.write64be builtin.MutableByteArray.write64be : MutableByteArray g -> Nat -> Nat ->{g, Exception} () - 531. -- ##MutableByteArray.write8 + 533. -- ##MutableByteArray.write8 builtin.MutableByteArray.write8 : MutableByteArray g -> Nat -> Nat ->{g, Exception} () - 532. -- ##Nat + 534. -- ##Nat builtin type builtin.Nat - 533. -- ##Nat.* + 535. -- ##Nat.* builtin.Nat.* : Nat -> Nat -> Nat - 534. -- ##Nat.+ + 536. -- ##Nat.+ builtin.Nat.+ : Nat -> Nat -> Nat - 535. -- ##Nat./ + 537. -- ##Nat./ builtin.Nat./ : Nat -> Nat -> Nat - 536. -- ##Nat.and + 538. -- ##Nat.and builtin.Nat.and : Nat -> Nat -> Nat - 537. -- ##Nat.complement + 539. -- ##Nat.complement builtin.Nat.complement : Nat -> Nat - 538. -- ##Nat.drop + 540. -- ##Nat.drop builtin.Nat.drop : Nat -> Nat -> Nat - 539. -- ##Nat.== + 541. -- ##Nat.== builtin.Nat.eq : Nat -> Nat -> Boolean - 540. -- ##Nat.fromText + 542. -- ##Nat.fromText builtin.Nat.fromText : Text -> Optional Nat - 541. -- ##Nat.> + 543. -- ##Nat.> builtin.Nat.gt : Nat -> Nat -> Boolean - 542. -- ##Nat.>= + 544. -- ##Nat.>= builtin.Nat.gteq : Nat -> Nat -> Boolean - 543. -- ##Nat.increment + 545. -- ##Nat.increment builtin.Nat.increment : Nat -> Nat - 544. -- ##Nat.isEven + 546. -- ##Nat.isEven builtin.Nat.isEven : Nat -> Boolean - 545. -- ##Nat.isOdd + 547. -- ##Nat.isOdd builtin.Nat.isOdd : Nat -> Boolean - 546. -- ##Nat.leadingZeros + 548. -- ##Nat.leadingZeros builtin.Nat.leadingZeros : Nat -> Nat - 547. -- ##Nat.< + 549. -- ##Nat.< builtin.Nat.lt : Nat -> Nat -> Boolean - 548. -- ##Nat.<= + 550. -- ##Nat.<= builtin.Nat.lteq : Nat -> Nat -> Boolean - 549. -- ##Nat.mod + 551. -- ##Nat.mod builtin.Nat.mod : Nat -> Nat -> Nat - 550. -- ##Nat.or + 552. -- ##Nat.or builtin.Nat.or : Nat -> Nat -> Nat - 551. -- ##Nat.popCount + 553. -- ##Nat.popCount builtin.Nat.popCount : Nat -> Nat - 552. -- ##Nat.pow + 554. -- ##Nat.pow builtin.Nat.pow : Nat -> Nat -> Nat - 553. -- ##Nat.shiftLeft + 555. -- ##Nat.shiftLeft builtin.Nat.shiftLeft : Nat -> Nat -> Nat - 554. -- ##Nat.shiftRight + 556. -- ##Nat.shiftRight builtin.Nat.shiftRight : Nat -> Nat -> Nat - 555. -- ##Nat.sub + 557. -- ##Nat.sub builtin.Nat.sub : Nat -> Nat -> Int - 556. -- ##Nat.toFloat + 558. -- ##Nat.toFloat builtin.Nat.toFloat : Nat -> Float - 557. -- ##Nat.toInt + 559. -- ##Nat.toInt builtin.Nat.toInt : Nat -> Int - 558. -- ##Nat.toText + 560. -- ##Nat.toText builtin.Nat.toText : Nat -> Text - 559. -- ##Nat.trailingZeros + 561. -- ##Nat.trailingZeros builtin.Nat.trailingZeros : Nat -> Nat - 560. -- ##Nat.xor + 562. -- ##Nat.xor builtin.Nat.xor : Nat -> Nat -> Nat - 561. -- #nirp5os0q69o4e1u9p3t6mmq6l6otluefi3ksm7dhm0diidjvkkgl8o9bvnflbj0sanuvdusf34f1qrins3ktcaglpcqv9oums2slsg + 563. -- #nirp5os0q69o4e1u9p3t6mmq6l6otluefi3ksm7dhm0diidjvkkgl8o9bvnflbj0sanuvdusf34f1qrins3ktcaglpcqv9oums2slsg structural type builtin.Optional a - 562. -- #nirp5os0q69o4e1u9p3t6mmq6l6otluefi3ksm7dhm0diidjvkkgl8o9bvnflbj0sanuvdusf34f1qrins3ktcaglpcqv9oums2slsg#1 + 564. -- #nirp5os0q69o4e1u9p3t6mmq6l6otluefi3ksm7dhm0diidjvkkgl8o9bvnflbj0sanuvdusf34f1qrins3ktcaglpcqv9oums2slsg#1 builtin.Optional.None : Optional a - 563. -- #nirp5os0q69o4e1u9p3t6mmq6l6otluefi3ksm7dhm0diidjvkkgl8o9bvnflbj0sanuvdusf34f1qrins3ktcaglpcqv9oums2slsg#0 + 565. -- #nirp5os0q69o4e1u9p3t6mmq6l6otluefi3ksm7dhm0diidjvkkgl8o9bvnflbj0sanuvdusf34f1qrins3ktcaglpcqv9oums2slsg#0 builtin.Optional.Some : a -> Optional a - 564. -- ##Pattern + 566. -- ##Pattern builtin type builtin.Pattern - 565. -- ##Pattern.capture + 567. -- ##Pattern.capture builtin.Pattern.capture : Pattern a -> Pattern a - 566. -- ##Pattern.isMatch + 568. -- ##Pattern.isMatch builtin.Pattern.isMatch : Pattern a -> a -> Boolean - 567. -- ##Pattern.join + 569. -- ##Pattern.join builtin.Pattern.join : [Pattern a] -> Pattern a - 568. -- ##Pattern.many + 570. -- ##Pattern.many builtin.Pattern.many : Pattern a -> Pattern a - 569. -- ##Pattern.or + 571. -- ##Pattern.or builtin.Pattern.or : Pattern a -> Pattern a -> Pattern a - 570. -- ##Pattern.replicate + 572. -- ##Pattern.replicate builtin.Pattern.replicate : Nat -> Nat -> Pattern a -> Pattern a - 571. -- ##Pattern.run + 573. -- ##Pattern.run builtin.Pattern.run : Pattern a -> a -> Optional ([a], a) - 572. -- #cbo8de57n17pgc5iic1741jeiunhvhfcfd7gt79vd6516u64aplasdodqoouejbgovhge2le5jb6rje923fcrllhtu01t29cdrssgbg + 574. -- #cbo8de57n17pgc5iic1741jeiunhvhfcfd7gt79vd6516u64aplasdodqoouejbgovhge2le5jb6rje923fcrllhtu01t29cdrssgbg structural type builtin.Pretty txt - 573. -- #fqfaur9v9v4fks5d0c74ouitpjp121c3fbu2l9t05km8otjcj43gk453vu668pg54rte6qmh4v3uao6vbfpntrtaq057jgni1jk8fj8 + 575. -- #fqfaur9v9v4fks5d0c74ouitpjp121c3fbu2l9t05km8otjcj43gk453vu668pg54rte6qmh4v3uao6vbfpntrtaq057jgni1jk8fj8 unique type builtin.Pretty.Annotated w txt - 574. -- #fqfaur9v9v4fks5d0c74ouitpjp121c3fbu2l9t05km8otjcj43gk453vu668pg54rte6qmh4v3uao6vbfpntrtaq057jgni1jk8fj8#1 + 576. -- #fqfaur9v9v4fks5d0c74ouitpjp121c3fbu2l9t05km8otjcj43gk453vu668pg54rte6qmh4v3uao6vbfpntrtaq057jgni1jk8fj8#1 builtin.Pretty.Annotated.Append : w -> [Annotated w txt] -> Annotated w txt - 575. -- #fqfaur9v9v4fks5d0c74ouitpjp121c3fbu2l9t05km8otjcj43gk453vu668pg54rte6qmh4v3uao6vbfpntrtaq057jgni1jk8fj8#6 + 577. -- #fqfaur9v9v4fks5d0c74ouitpjp121c3fbu2l9t05km8otjcj43gk453vu668pg54rte6qmh4v3uao6vbfpntrtaq057jgni1jk8fj8#6 builtin.Pretty.Annotated.Empty : Annotated w txt - 576. -- #fqfaur9v9v4fks5d0c74ouitpjp121c3fbu2l9t05km8otjcj43gk453vu668pg54rte6qmh4v3uao6vbfpntrtaq057jgni1jk8fj8#4 + 578. -- #fqfaur9v9v4fks5d0c74ouitpjp121c3fbu2l9t05km8otjcj43gk453vu668pg54rte6qmh4v3uao6vbfpntrtaq057jgni1jk8fj8#4 builtin.Pretty.Annotated.Group : w -> Annotated w txt -> Annotated w txt - 577. -- #fqfaur9v9v4fks5d0c74ouitpjp121c3fbu2l9t05km8otjcj43gk453vu668pg54rte6qmh4v3uao6vbfpntrtaq057jgni1jk8fj8#3 + 579. -- #fqfaur9v9v4fks5d0c74ouitpjp121c3fbu2l9t05km8otjcj43gk453vu668pg54rte6qmh4v3uao6vbfpntrtaq057jgni1jk8fj8#3 builtin.Pretty.Annotated.Indent : w -> Annotated w txt -> Annotated w txt -> Annotated w txt -> Annotated w txt - 578. -- #fqfaur9v9v4fks5d0c74ouitpjp121c3fbu2l9t05km8otjcj43gk453vu668pg54rte6qmh4v3uao6vbfpntrtaq057jgni1jk8fj8#7 + 580. -- #fqfaur9v9v4fks5d0c74ouitpjp121c3fbu2l9t05km8otjcj43gk453vu668pg54rte6qmh4v3uao6vbfpntrtaq057jgni1jk8fj8#7 builtin.Pretty.Annotated.Lit : w -> txt -> Annotated w txt - 579. -- #fqfaur9v9v4fks5d0c74ouitpjp121c3fbu2l9t05km8otjcj43gk453vu668pg54rte6qmh4v3uao6vbfpntrtaq057jgni1jk8fj8#2 + 581. -- #fqfaur9v9v4fks5d0c74ouitpjp121c3fbu2l9t05km8otjcj43gk453vu668pg54rte6qmh4v3uao6vbfpntrtaq057jgni1jk8fj8#2 builtin.Pretty.Annotated.OrElse : w -> Annotated w txt -> Annotated w txt -> Annotated w txt - 580. -- #fqfaur9v9v4fks5d0c74ouitpjp121c3fbu2l9t05km8otjcj43gk453vu668pg54rte6qmh4v3uao6vbfpntrtaq057jgni1jk8fj8#0 + 582. -- #fqfaur9v9v4fks5d0c74ouitpjp121c3fbu2l9t05km8otjcj43gk453vu668pg54rte6qmh4v3uao6vbfpntrtaq057jgni1jk8fj8#0 builtin.Pretty.Annotated.Table : w -> [[Annotated w txt]] -> Annotated w txt - 581. -- #fqfaur9v9v4fks5d0c74ouitpjp121c3fbu2l9t05km8otjcj43gk453vu668pg54rte6qmh4v3uao6vbfpntrtaq057jgni1jk8fj8#5 + 583. -- #fqfaur9v9v4fks5d0c74ouitpjp121c3fbu2l9t05km8otjcj43gk453vu668pg54rte6qmh4v3uao6vbfpntrtaq057jgni1jk8fj8#5 builtin.Pretty.Annotated.Wrap : w -> Annotated w txt -> Annotated w txt - 582. -- #loh4epguhqj73ut43b287p1272ko7ackkr544k9scurlsf6m6smpifp5ghdcscvqdofpf79req1pl4e7qni0hvo4m0gsi3f1jhn9nvo + 584. -- #loh4epguhqj73ut43b287p1272ko7ackkr544k9scurlsf6m6smpifp5ghdcscvqdofpf79req1pl4e7qni0hvo4m0gsi3f1jhn9nvo builtin.Pretty.append : Pretty txt -> Pretty txt -> Pretty txt - 583. -- #sonptakf85a3uklev4rq0pub00k56jdpaop4tcd9bmk0gmjjij5t16sf1knspku2hbp0uikiflbo0dtjv1i6r3t2rpjh86vo1rlaer8 + 585. -- #sonptakf85a3uklev4rq0pub00k56jdpaop4tcd9bmk0gmjjij5t16sf1knspku2hbp0uikiflbo0dtjv1i6r3t2rpjh86vo1rlaer8 builtin.Pretty.empty : Pretty txt - 584. -- #mlpplm1bhqkcif5j09204uuvfll7qte95msb0skjfd30nmei005kiich1ao39gm2j8687s14qvf5llu6i1a6fvt4vdmbp99jlfundfo + 586. -- #mlpplm1bhqkcif5j09204uuvfll7qte95msb0skjfd30nmei005kiich1ao39gm2j8687s14qvf5llu6i1a6fvt4vdmbp99jlfundfo builtin.Pretty.get : Pretty txt -> Annotated () txt - 585. -- #303bqopo0ditms2abmf35ikbgbb7gkcmqcd5g5eie85lvvmkpd89mi8v0etgm2508bejlgj9e7ffvpufj3v94mlks3ugvr3sjkbttq0 + 587. -- #303bqopo0ditms2abmf35ikbgbb7gkcmqcd5g5eie85lvvmkpd89mi8v0etgm2508bejlgj9e7ffvpufj3v94mlks3ugvr3sjkbttq0 builtin.Pretty.group : Pretty txt -> Pretty txt - 586. -- #o5dik2fg10998uep20m3du4iqqjbtap0apq4452g9emve8g3m655392u97iunphh90opvg92riaabbjsofc02bhr0qkcousvqgg2a78 + 588. -- #o5dik2fg10998uep20m3du4iqqjbtap0apq4452g9emve8g3m655392u97iunphh90opvg92riaabbjsofc02bhr0qkcousvqgg2a78 builtin.Pretty.indent : Pretty txt -> Pretty txt -> Pretty txt - 587. -- #evbq94p3dn4l8ugge1o2f8dk072gcfho082lm7j02ejjsnctb5inkfsasuplmu8a529jh4v0h6v8ti7koff23e58cceda0nlh98m530 + 589. -- #evbq94p3dn4l8ugge1o2f8dk072gcfho082lm7j02ejjsnctb5inkfsasuplmu8a529jh4v0h6v8ti7koff23e58cceda0nlh98m530 builtin.Pretty.indent' : Pretty txt -> Pretty txt -> Pretty txt -> Pretty txt - 588. -- #u5s76jh01asd7hbqaq466dp48v217o7tclphuk7gepc99vbv0fbfv5j2uq8o3n7lsvpiri5925o02j22a6tq7koc9t8tbcps4naetbg + 590. -- #u5s76jh01asd7hbqaq466dp48v217o7tclphuk7gepc99vbv0fbfv5j2uq8o3n7lsvpiri5925o02j22a6tq7koc9t8tbcps4naetbg builtin.Pretty.join : [Pretty txt] -> Pretty txt - 589. -- #uoti2ppnfp1l11obl8tto1m2h4r6n1i14cc3i45bjpjrhogh52cuoch1n6b1q0n3jf6blr9585stb1i155jjq17b4c2hvd4d3abmrpo + 591. -- #uoti2ppnfp1l11obl8tto1m2h4r6n1i14cc3i45bjpjrhogh52cuoch1n6b1q0n3jf6blr9585stb1i155jjq17b4c2hvd4d3abmrpo builtin.Pretty.lit : txt -> Pretty txt - 590. -- #mabh3q4gsoiao223a03t7voj937b3sefb7e1j5r33su5o5tqrkmenl2aeboq909vs3bh2snltuqrfcsd3liic1vma0f976h1eo63upg + 592. -- #mabh3q4gsoiao223a03t7voj937b3sefb7e1j5r33su5o5tqrkmenl2aeboq909vs3bh2snltuqrfcsd3liic1vma0f976h1eo63upg builtin.Pretty.map : (txt ->{g} txt2) -> Pretty txt ->{g} Pretty txt2 - 591. -- #i260pi6le5cdptpo78mbbi4r6qfc76kvb1g9r9d210b1altjtmoqi8b6psu3ag5hb8gq7crhgei406arn999c1dfrqt67j8vnls4gg8 + 593. -- #i260pi6le5cdptpo78mbbi4r6qfc76kvb1g9r9d210b1altjtmoqi8b6psu3ag5hb8gq7crhgei406arn999c1dfrqt67j8vnls4gg8 builtin.Pretty.orElse : Pretty txt -> Pretty txt -> Pretty txt - 592. -- #cbo8de57n17pgc5iic1741jeiunhvhfcfd7gt79vd6516u64aplasdodqoouejbgovhge2le5jb6rje923fcrllhtu01t29cdrssgbg#0 + 594. -- #cbo8de57n17pgc5iic1741jeiunhvhfcfd7gt79vd6516u64aplasdodqoouejbgovhge2le5jb6rje923fcrllhtu01t29cdrssgbg#0 builtin.Pretty.Pretty : Annotated () txt -> Pretty txt - 593. -- #bvuv0d49kosa6op5j54ln2h3vbs3209e4fjtb3kehvn76p92l8682qnp2r5e9t7sflnv3dfb0uf9p0f76qbobn562oqdusi9mo3ubjo + 595. -- #bvuv0d49kosa6op5j54ln2h3vbs3209e4fjtb3kehvn76p92l8682qnp2r5e9t7sflnv3dfb0uf9p0f76qbobn562oqdusi9mo3ubjo builtin.Pretty.sepBy : Pretty txt -> [Pretty txt] -> Pretty txt - 594. -- #rm3moq6nqvk1rs49lsshdtheqo72qv2fg1fqkk5m8tbqppik498otkrq6ppu7fu9p1kddldmpv0dig7bn82n0tj0ngnbu83fpb11upg + 596. -- #rm3moq6nqvk1rs49lsshdtheqo72qv2fg1fqkk5m8tbqppik498otkrq6ppu7fu9p1kddldmpv0dig7bn82n0tj0ngnbu83fpb11upg builtin.Pretty.table : [[Pretty txt]] -> Pretty txt - 595. -- #n01tnlfatb0lo6s762cfofhtdavui9j8ovljacdbn9bvrfoeimd0pkner0694d3lb1f4qa5gur4975lvopftk7jkrflmhjv6gbsifbo + 597. -- #n01tnlfatb0lo6s762cfofhtdavui9j8ovljacdbn9bvrfoeimd0pkner0694d3lb1f4qa5gur4975lvopftk7jkrflmhjv6gbsifbo builtin.Pretty.wrap : Pretty txt -> Pretty txt - 596. -- ##Ref + 598. -- ##Ref builtin type builtin.Ref - 597. -- ##Ref.read + 599. -- ##Ref.read builtin.Ref.read : Ref g a ->{g} a - 598. -- ##Ref.write + 600. -- ##Ref.write builtin.Ref.write : Ref g a -> a ->{g} () - 599. -- ##Effect + 601. -- ##Effect builtin type builtin.Request - 600. -- #bga77hj5p43epjosu36iero5ulpm7hqrct1slj5ivdcajsr52ksjam8d5smq2965netv9t43o3g0amgva26qoatt4qth29khkuds2t0 + 602. -- #bga77hj5p43epjosu36iero5ulpm7hqrct1slj5ivdcajsr52ksjam8d5smq2965netv9t43o3g0amgva26qoatt4qth29khkuds2t0 unique type builtin.RewriteCase a b - 601. -- #bga77hj5p43epjosu36iero5ulpm7hqrct1slj5ivdcajsr52ksjam8d5smq2965netv9t43o3g0amgva26qoatt4qth29khkuds2t0#0 + 603. -- #bga77hj5p43epjosu36iero5ulpm7hqrct1slj5ivdcajsr52ksjam8d5smq2965netv9t43o3g0amgva26qoatt4qth29khkuds2t0#0 builtin.RewriteCase.RewriteCase : a -> b -> RewriteCase a b - 602. -- #qcot4bpj2skgnui8hoignn6fl2gnn2nfrur451ft2egd5n1ndu6ti4uu7r1mvtc8r4p7iielfijk2mb7md9tt2m2rdvaikah4oluf7o + 604. -- #qcot4bpj2skgnui8hoignn6fl2gnn2nfrur451ft2egd5n1ndu6ti4uu7r1mvtc8r4p7iielfijk2mb7md9tt2m2rdvaikah4oluf7o unique type builtin.Rewrites a - 603. -- #qcot4bpj2skgnui8hoignn6fl2gnn2nfrur451ft2egd5n1ndu6ti4uu7r1mvtc8r4p7iielfijk2mb7md9tt2m2rdvaikah4oluf7o#0 + 605. -- #qcot4bpj2skgnui8hoignn6fl2gnn2nfrur451ft2egd5n1ndu6ti4uu7r1mvtc8r4p7iielfijk2mb7md9tt2m2rdvaikah4oluf7o#0 builtin.Rewrites.Rewrites : a -> Rewrites a - 604. -- #nu6eab37fl81lb5hfcainu83hph0ksqjsjgjbqvc3t8o13djtt5511qfa6tuggc5c3re06c5p6eto5o2cqme0jdlo31nnd13npqigjo + 606. -- #nu6eab37fl81lb5hfcainu83hph0ksqjsjgjbqvc3t8o13djtt5511qfa6tuggc5c3re06c5p6eto5o2cqme0jdlo31nnd13npqigjo unique type builtin.RewriteSignature a b - 605. -- #nu6eab37fl81lb5hfcainu83hph0ksqjsjgjbqvc3t8o13djtt5511qfa6tuggc5c3re06c5p6eto5o2cqme0jdlo31nnd13npqigjo#0 + 607. -- #nu6eab37fl81lb5hfcainu83hph0ksqjsjgjbqvc3t8o13djtt5511qfa6tuggc5c3re06c5p6eto5o2cqme0jdlo31nnd13npqigjo#0 builtin.RewriteSignature.RewriteSignature : (a -> b -> ()) -> RewriteSignature a b - 606. -- #bvffhraos4oatd3qmedt676dqul9c1oj8r4cqns36lsrue84kl0ote15iqbbmgu8joek3gce1h2raqas5b9nnvs2d79l9mrpmmi2sf0 + 608. -- #bvffhraos4oatd3qmedt676dqul9c1oj8r4cqns36lsrue84kl0ote15iqbbmgu8joek3gce1h2raqas5b9nnvs2d79l9mrpmmi2sf0 unique type builtin.RewriteTerm a b - 607. -- #bvffhraos4oatd3qmedt676dqul9c1oj8r4cqns36lsrue84kl0ote15iqbbmgu8joek3gce1h2raqas5b9nnvs2d79l9mrpmmi2sf0#0 + 609. -- #bvffhraos4oatd3qmedt676dqul9c1oj8r4cqns36lsrue84kl0ote15iqbbmgu8joek3gce1h2raqas5b9nnvs2d79l9mrpmmi2sf0#0 builtin.RewriteTerm.RewriteTerm : a -> b -> RewriteTerm a b - 608. -- ##Scope + 610. -- ##Scope builtin type builtin.Scope - 609. -- ##Scope.array + 611. -- ##Scope.array builtin.Scope.array : Nat ->{Scope s} MutableArray (Scope s) a - 610. -- ##Scope.arrayOf + 612. -- ##Scope.arrayOf builtin.Scope.arrayOf : a -> Nat ->{Scope s} MutableArray (Scope s) a - 611. -- ##Scope.bytearray + 613. -- ##Scope.bytearray builtin.Scope.bytearray : Nat ->{Scope s} MutableByteArray (Scope s) - 612. -- ##Scope.bytearrayOf + 614. -- ##Scope.bytearrayOf builtin.Scope.bytearrayOf : Nat -> Nat ->{Scope s} MutableByteArray (Scope s) - 613. -- ##Scope.ref + 615. -- ##Scope.ref builtin.Scope.ref : a ->{Scope s} Ref {Scope s} a - 614. -- ##Scope.run + 616. -- ##Scope.run builtin.Scope.run : (∀ s. '{g, Scope s} r) ->{g} r - 615. -- #6uigas14aqgd889s036hq9ssrlo22pju41009m0rktetcrbm97qniljjc1rv1u661r4f63oq6pupoevghs8a2hupvlbi6qi4ntn9320 + 617. -- #6uigas14aqgd889s036hq9ssrlo22pju41009m0rktetcrbm97qniljjc1rv1u661r4f63oq6pupoevghs8a2hupvlbi6qi4ntn9320 structural type builtin.SeqView a b - 616. -- #6uigas14aqgd889s036hq9ssrlo22pju41009m0rktetcrbm97qniljjc1rv1u661r4f63oq6pupoevghs8a2hupvlbi6qi4ntn9320#0 + 618. -- #6uigas14aqgd889s036hq9ssrlo22pju41009m0rktetcrbm97qniljjc1rv1u661r4f63oq6pupoevghs8a2hupvlbi6qi4ntn9320#0 builtin.SeqView.VElem : a -> b -> SeqView a b - 617. -- #6uigas14aqgd889s036hq9ssrlo22pju41009m0rktetcrbm97qniljjc1rv1u661r4f63oq6pupoevghs8a2hupvlbi6qi4ntn9320#1 + 619. -- #6uigas14aqgd889s036hq9ssrlo22pju41009m0rktetcrbm97qniljjc1rv1u661r4f63oq6pupoevghs8a2hupvlbi6qi4ntn9320#1 builtin.SeqView.VEmpty : SeqView a b - 618. -- ##Socket.toText + 620. -- ##Socket.toText builtin.Socket.toText : Socket -> Text - 619. -- #pfp0ajb4v2mb9tspp29v53dkacb76aa1t5kbk1dl0q354cjcg4egdpmvtr5d6t818ucon9eubf6r1vdvh926fgk8otvbkvbpn90levo + 621. -- #pfp0ajb4v2mb9tspp29v53dkacb76aa1t5kbk1dl0q354cjcg4egdpmvtr5d6t818ucon9eubf6r1vdvh926fgk8otvbkvbpn90levo builtin.syntax.docAside : Doc2 -> Doc2 - 620. -- #mvov9qf78ctohefjbmrgs8ussspo5juhf75pee4ikkg8asuos72unn4pjn3fdel8471soj2vaskd5ls103pb6nb8qf75sjn4igs7v48 + 622. -- #mvov9qf78ctohefjbmrgs8ussspo5juhf75pee4ikkg8asuos72unn4pjn3fdel8471soj2vaskd5ls103pb6nb8qf75sjn4igs7v48 builtin.syntax.docBlockquote : Doc2 -> Doc2 - 621. -- #cg64hg7dag89u80104kit2p40rhmo1k6h1j8obfhjolpogs705bt6hc92ct6rfj8h74m3ioug14u9pm1s7qqpmjda2srjojhi01nvf0 + 623. -- #cg64hg7dag89u80104kit2p40rhmo1k6h1j8obfhjolpogs705bt6hc92ct6rfj8h74m3ioug14u9pm1s7qqpmjda2srjojhi01nvf0 builtin.syntax.docBold : Doc2 -> Doc2 - 622. -- #3qd5kt9gjiggrb871al82n11jccedl3kb5p8ffemr703frn38tqajkett30fg7hef5orh7vl0obp3lap9qq2po3ufcnu4k3bik81rlg + 624. -- #3qd5kt9gjiggrb871al82n11jccedl3kb5p8ffemr703frn38tqajkett30fg7hef5orh7vl0obp3lap9qq2po3ufcnu4k3bik81rlg builtin.syntax.docBulletedList : [Doc2] -> Doc2 - 623. -- #el0rph43k5qg25qg20o5jdjukuful041r87v92tcb2339om0hp9u6vqtrcrfkvgj78hrpo2o1l39bbg1oier87pvgkli0lkgalgpo90 + 625. -- #el0rph43k5qg25qg20o5jdjukuful041r87v92tcb2339om0hp9u6vqtrcrfkvgj78hrpo2o1l39bbg1oier87pvgkli0lkgalgpo90 builtin.syntax.docCallout : Optional Doc2 -> Doc2 -> Doc2 - 624. -- #7jij106qpusbsbpqhmtgrk59qo8ss9e77rtrc1h9hbpnbab8sq717fe6hppmhhds9smqbv3k2q0irjgoe4mogatlp9e4k25kopt6rgo + 626. -- #7jij106qpusbsbpqhmtgrk59qo8ss9e77rtrc1h9hbpnbab8sq717fe6hppmhhds9smqbv3k2q0irjgoe4mogatlp9e4k25kopt6rgo builtin.syntax.docCode : Doc2 -> Doc2 - 625. -- #3paq4qqrk028tati33723c4aqi7ebgnjln12avbnf7eu8h8sflg0frlehb4lni4ru0pcfg9ftsurq3pb2q11cfebeki51vom697l7h0 + 627. -- #3paq4qqrk028tati33723c4aqi7ebgnjln12avbnf7eu8h8sflg0frlehb4lni4ru0pcfg9ftsurq3pb2q11cfebeki51vom697l7h0 builtin.syntax.docCodeBlock : Text -> Text -> Doc2 - 626. -- #1of955s8tqa74vu0ve863p8dn2mncc2anmms54aj084pkbdcpml6ckvs0qb4defi0df3b1e8inp29p60ac93hf2u7to0je4op9fum40 + 628. -- #1of955s8tqa74vu0ve863p8dn2mncc2anmms54aj084pkbdcpml6ckvs0qb4defi0df3b1e8inp29p60ac93hf2u7to0je4op9fum40 builtin.syntax.docColumn : [Doc2] -> Doc2 - 627. -- #ukv56cjchfao07qb08l7iimd2mmv09s5glmtljo5b71leaijtja04obd0u1hsr38itjnv85f7jvd37nr654bl4lfn4msr1one0hi4s0 + 629. -- #ukv56cjchfao07qb08l7iimd2mmv09s5glmtljo5b71leaijtja04obd0u1hsr38itjnv85f7jvd37nr654bl4lfn4msr1one0hi4s0 builtin.syntax.docEmbedAnnotation : tm -> Doc2.Term - 628. -- #uccvv8mn62ne8iqppsnpgbquqmhk4hk3n4tg7p6kttr20gov4698tu18jmmvdcs7ab455q7kklhb4uv1mtei4vbvq4qmbtbu1dbagmg + 630. -- #uccvv8mn62ne8iqppsnpgbquqmhk4hk3n4tg7p6kttr20gov4698tu18jmmvdcs7ab455q7kklhb4uv1mtei4vbvq4qmbtbu1dbagmg builtin.syntax.docEmbedAnnotations : tms -> tms - 629. -- #3r6c432d46j544g26chbfgfqrr79k7disfn41igdpe0thjar30lrjhqsuhipsr9rvg8jk6rpmnalc5iu8j842sq3svu1bo4c02og7to + 631. -- #3r6c432d46j544g26chbfgfqrr79k7disfn41igdpe0thjar30lrjhqsuhipsr9rvg8jk6rpmnalc5iu8j842sq3svu1bo4c02og7to builtin.syntax.docEmbedSignatureLink : '{g} t -> Doc2.Term - 630. -- #pjtf55viib2vgc4hp60e2bui7r8iij7kan0u6uq6d60d6d6ccpq81f9ngcrou2lob9maqsvcqsa85ev4171iml9elg5hbfaopijo6lo + 632. -- #pjtf55viib2vgc4hp60e2bui7r8iij7kan0u6uq6d60d6d6ccpq81f9ngcrou2lob9maqsvcqsa85ev4171iml9elg5hbfaopijo6lo builtin.syntax.docEmbedTermLink : '{g} t -> Either a Doc2.Term - 631. -- #7t98ois54isfkh31uefvdg4bg302s5q3sun4hfh0mqnosk4ded353jp0p2ij6b22vnvlcbipcv2jb91suh6qc33i7uqlfuto9f0r4n8 + 633. -- #7t98ois54isfkh31uefvdg4bg302s5q3sun4hfh0mqnosk4ded353jp0p2ij6b22vnvlcbipcv2jb91suh6qc33i7uqlfuto9f0r4n8 builtin.syntax.docEmbedTypeLink : typ -> Either typ b - 632. -- #ngon71rp4i6a3qd36pu015kk7d7il2i1491upfgernpm635hkjhcrm84oumfe6tvn193nb1lsrkulvvnmq5os0evm6sndlarquhe3i0 + 634. -- #ngon71rp4i6a3qd36pu015kk7d7il2i1491upfgernpm635hkjhcrm84oumfe6tvn193nb1lsrkulvvnmq5os0evm6sndlarquhe3i0 builtin.syntax.docEval : 'a -> Doc2 - 633. -- #hsmpfd41n9m02atorpvnj2gf7lcf04o51nrc8kohfddgq4vo18unk2c1ci8pfsam9f4i02babsu7urhvcek8fbfrilcusrgnaifp278 + 635. -- #hsmpfd41n9m02atorpvnj2gf7lcf04o51nrc8kohfddgq4vo18unk2c1ci8pfsam9f4i02babsu7urhvcek8fbfrilcusrgnaifp278 builtin.syntax.docEvalInline : 'a -> Doc2 - 634. -- #73m68mnahgud6dl9red3rcmd49qn80d0ptr2m1h163e1jr1fitibr2hf84o62cqs7dsqiuea578ge7en7kk290k6778lgo39btl5468 + 636. -- #73m68mnahgud6dl9red3rcmd49qn80d0ptr2m1h163e1jr1fitibr2hf84o62cqs7dsqiuea578ge7en7kk290k6778lgo39btl5468 builtin.syntax.docExample : Nat -> '{g} t -> Doc2 - 635. -- #62nif2cvq90cnds9eo95hdn6uvgqo6np4eku52ar4pnb18sfdetl9oo6cu99hbksfa0b4krlcvse5gr5uv5k5b0ukuovt75krhlp418 + 637. -- #62nif2cvq90cnds9eo95hdn6uvgqo6np4eku52ar4pnb18sfdetl9oo6cu99hbksfa0b4krlcvse5gr5uv5k5b0ukuovt75krhlp418 builtin.syntax.docExampleBlock : Nat -> '{g} t -> Doc2 - 636. -- #pomj7lft70jnnuk5job0pstih2mosva1oee4tediqbkhnm54tjqnfe6qs1mqt8os1ehg9ksgenb6veub2ngdpb1qat400vn0bj3fju0 + 638. -- #pomj7lft70jnnuk5job0pstih2mosva1oee4tediqbkhnm54tjqnfe6qs1mqt8os1ehg9ksgenb6veub2ngdpb1qat400vn0bj3fju0 builtin.syntax.docFoldedSource : [( Either Type Doc2.Term, [Doc2.Term])] -> Doc2 - 637. -- #dg44n9t54o1jkl3dtecsqh9vvs57jsvtvbfohkrtolqqgf2g7mf5el9i5jhg6qop1arms99c7s34d9h5rnrvf1fi4100lerjg3b38q8 + 639. -- #dg44n9t54o1jkl3dtecsqh9vvs57jsvtvbfohkrtolqqgf2g7mf5el9i5jhg6qop1arms99c7s34d9h5rnrvf1fi4100lerjg3b38q8 builtin.syntax.docFormatConsole : Doc2 -> Pretty (Either SpecialForm ConsoleText) - 638. -- #99qvifgs3u7nof50jbp5lhrf8cab0qiujr1tque2b7hfj56r39o8ot2fafhafuphoraddl1j142k994e22g5v2rhq98flc0954t5918 + 640. -- #99qvifgs3u7nof50jbp5lhrf8cab0qiujr1tque2b7hfj56r39o8ot2fafhafuphoraddl1j142k994e22g5v2rhq98flc0954t5918 builtin.syntax.docGroup : Doc2 -> Doc2 - 639. -- #gsratvk7mo273bqhivdv06f9rog2cj48u7ci0jp6ubt5oidf8cq0rjilimkas5801inbbsjcedh61jl40i3en1qu6r9vfe684ad6r08 + 641. -- #gsratvk7mo273bqhivdv06f9rog2cj48u7ci0jp6ubt5oidf8cq0rjilimkas5801inbbsjcedh61jl40i3en1qu6r9vfe684ad6r08 builtin.syntax.docItalic : Doc2 -> Doc2 - 640. -- #piohhscvm6lgpk6vfg91u2ndmlfv81nnkspihom77ucr4dev6s22rk2n9hp38nifh5p8vt7jfvep85vudpvlg2tt99e9s2qfjv5oau8 + 642. -- #piohhscvm6lgpk6vfg91u2ndmlfv81nnkspihom77ucr4dev6s22rk2n9hp38nifh5p8vt7jfvep85vudpvlg2tt99e9s2qfjv5oau8 builtin.syntax.docJoin : [Doc2] -> Doc2 - 641. -- #hjdqcolihf4obmnfoakl2t5hs1e39hpmpo9ijvc37fqgejog1ii7fpd4q2fe2rkm62tf81unmqlbud8uh63vaa9feaekg5a7uo3nq00 + 643. -- #hjdqcolihf4obmnfoakl2t5hs1e39hpmpo9ijvc37fqgejog1ii7fpd4q2fe2rkm62tf81unmqlbud8uh63vaa9feaekg5a7uo3nq00 builtin.syntax.docLink : Either Type Doc2.Term -> Doc2 - 642. -- #iv6urr76b0ohvr22qa6d05e7e01cd0re77g8c98cm0bqo0im345fotsevqnhk1igtutkrrqm562gtltofvku5mh0i87ru8tdf0i53bo + 644. -- #iv6urr76b0ohvr22qa6d05e7e01cd0re77g8c98cm0bqo0im345fotsevqnhk1igtutkrrqm562gtltofvku5mh0i87ru8tdf0i53bo builtin.syntax.docNamedLink : Doc2 -> Doc2 -> Doc2 - 643. -- #b5dvn0bqj3rc1rkmlep5f6cd6n3vp247hqku8lqndena5ocgcoae18iuq3985finagr919re4fvji011ved0g21i6o0je2jn8f7k1p0 + 645. -- #b5dvn0bqj3rc1rkmlep5f6cd6n3vp247hqku8lqndena5ocgcoae18iuq3985finagr919re4fvji011ved0g21i6o0je2jn8f7k1p0 builtin.syntax.docNumberedList : Nat -> [Doc2] -> Doc2 - 644. -- #fs8mho20fqj31ch5kpn8flm4geomotov7fb5ct8mtnh52ladorgp22vder3jgt1mr0u710e6s9gn4u36c9sp19vitvq1r0adtm3t1c0 + 646. -- #fs8mho20fqj31ch5kpn8flm4geomotov7fb5ct8mtnh52ladorgp22vder3jgt1mr0u710e6s9gn4u36c9sp19vitvq1r0adtm3t1c0 builtin.syntax.docParagraph : [Doc2] -> Doc2 - 645. -- #6dvkai3hc122e2h2h8c3jnijink5m20e27i640qvnt6smefpp2vna1rq4gbmulhb46tdabmkb5hsjeiuo4adtsutg4iu1vfmqhlueso + 647. -- #6dvkai3hc122e2h2h8c3jnijink5m20e27i640qvnt6smefpp2vna1rq4gbmulhb46tdabmkb5hsjeiuo4adtsutg4iu1vfmqhlueso builtin.syntax.docSection : Doc2 -> [Doc2] -> Doc2 - 646. -- #n0idf1bdrq5vgpk4pj9db5demk1es4jsnpodfoajftehvqjelsi0h5j2domdllq2peltdek4ptaqfpl4o8l6jpmqhcom9vq107ivdu0 + 648. -- #n0idf1bdrq5vgpk4pj9db5demk1es4jsnpodfoajftehvqjelsi0h5j2domdllq2peltdek4ptaqfpl4o8l6jpmqhcom9vq107ivdu0 builtin.syntax.docSignature : [Doc2.Term] -> Doc2 - 647. -- #git1povkck9jrptdmmpqrv1g17ptbq9hr17l52l8477ijk4cia24tr7cj36v1o22mvtk00qoo5jt4bs4e79sl3eh6is8ubh8aoc1pu0 + 649. -- #git1povkck9jrptdmmpqrv1g17ptbq9hr17l52l8477ijk4cia24tr7cj36v1o22mvtk00qoo5jt4bs4e79sl3eh6is8ubh8aoc1pu0 builtin.syntax.docSignatureInline : Doc2.Term -> Doc2 - 648. -- #47agivvofl1jegbqpdg0eeed72mdj29d623e4kdei0l10mhgckif7q2pd968ggribregcknra9u43mhehr1q86n0t4vbe4eestnu9l8 + 650. -- #47agivvofl1jegbqpdg0eeed72mdj29d623e4kdei0l10mhgckif7q2pd968ggribregcknra9u43mhehr1q86n0t4vbe4eestnu9l8 builtin.syntax.docSource : [( Either Type Doc2.Term, [Doc2.Term])] -> Doc2 - 649. -- #n6uk5tc4d8ipbga8boelh51ro24paveca9fijm1nkn3tlfddqludmlppb2ps8807v2kuou1a262sa59764mdhug2va69q4sls5jli10 + 651. -- #n6uk5tc4d8ipbga8boelh51ro24paveca9fijm1nkn3tlfddqludmlppb2ps8807v2kuou1a262sa59764mdhug2va69q4sls5jli10 builtin.syntax.docSourceElement : link -> annotations -> (link, annotations) - 650. -- #nurq288b5rfp1f5keccleh51ojgcpd2rp7cane6ftquf7gidtamffb8tr1r5h6luk1nsrqomn1k4as4kcpaskjjv35rnvoous457sag + 652. -- #nurq288b5rfp1f5keccleh51ojgcpd2rp7cane6ftquf7gidtamffb8tr1r5h6luk1nsrqomn1k4as4kcpaskjjv35rnvoous457sag builtin.syntax.docStrikethrough : Doc2 -> Doc2 - 651. -- #4ns2amu2njhvb5mtdvh3v7oljjb5ammnb41us4ekpbhb337b6mo2a4q0790cmrusko7omphtfdsaust2fn49hr5acl40ef8fkb9556g + 653. -- #4ns2amu2njhvb5mtdvh3v7oljjb5ammnb41us4ekpbhb337b6mo2a4q0790cmrusko7omphtfdsaust2fn49hr5acl40ef8fkb9556g builtin.syntax.docTable : [[Doc2]] -> Doc2 - 652. -- #i77kddfr68gbjt3767a091dtnqff9beltojh93md8peo28t59c6modeccsfd2tnrtmd75fa7dn0ie21kcv4me098q91h4ftg9eau5fo + 654. -- #i77kddfr68gbjt3767a091dtnqff9beltojh93md8peo28t59c6modeccsfd2tnrtmd75fa7dn0ie21kcv4me098q91h4ftg9eau5fo builtin.syntax.docTooltip : Doc2 -> Doc2 -> Doc2 - 653. -- #r0hdacbk2orcb2ate3uhd7ht05hmfa8643slm3u63nb3jaaim533up04lgt0pq97is43v2spkqble7mtu8f63hgcc0k2tb2jhpr2b68 + 655. -- #r0hdacbk2orcb2ate3uhd7ht05hmfa8643slm3u63nb3jaaim533up04lgt0pq97is43v2spkqble7mtu8f63hgcc0k2tb2jhpr2b68 builtin.syntax.docTransclude : d -> d - 654. -- #0nptdh40ngakd2rh92bl573a7vbdjcj2kc8rai39v8bb9dfpbj90i7nob381usjsott41c3cpo2m2q095fm0k0r68e8mrda135qa1k0 + 656. -- #0nptdh40ngakd2rh92bl573a7vbdjcj2kc8rai39v8bb9dfpbj90i7nob381usjsott41c3cpo2m2q095fm0k0r68e8mrda135qa1k0 builtin.syntax.docUntitledSection : [Doc2] -> Doc2 - 655. -- #krjm78blt08v52c52l4ubsnfidcrs0h6010j2v2h9ud38mgm6jj4vuqn4okp4g75039o7u78sbg6ghforucbfdf94f8am9kvt6875jo + 657. -- #krjm78blt08v52c52l4ubsnfidcrs0h6010j2v2h9ud38mgm6jj4vuqn4okp4g75039o7u78sbg6ghforucbfdf94f8am9kvt6875jo builtin.syntax.docVerbatim : Doc2 -> Doc2 - 656. -- #c14vgd4g1tkumf4jjd9vcoos1olb3f4gbc3hketf5l8h3i0efk8igbinh6gn018tr5075uo5nv1elva6tki6ofo3pdafidrkv9m0ot0 + 658. -- #c14vgd4g1tkumf4jjd9vcoos1olb3f4gbc3hketf5l8h3i0efk8igbinh6gn018tr5075uo5nv1elva6tki6ofo3pdafidrkv9m0ot0 builtin.syntax.docWord : Text -> Doc2 - 657. -- #aql7qk3iud6vs4cvu43aimopoosgk0fnipibdkc3so13adencmibgfn0u5c01r0adei55nkl3ttsjhl8gbj7tr4gnpj63g64ftbq6s0 + 659. -- #aql7qk3iud6vs4cvu43aimopoosgk0fnipibdkc3so13adencmibgfn0u5c01r0adei55nkl3ttsjhl8gbj7tr4gnpj63g64ftbq6s0 unique type builtin.Test.Result - 658. -- #aql7qk3iud6vs4cvu43aimopoosgk0fnipibdkc3so13adencmibgfn0u5c01r0adei55nkl3ttsjhl8gbj7tr4gnpj63g64ftbq6s0#0 + 660. -- #aql7qk3iud6vs4cvu43aimopoosgk0fnipibdkc3so13adencmibgfn0u5c01r0adei55nkl3ttsjhl8gbj7tr4gnpj63g64ftbq6s0#0 builtin.Test.Result.Fail : Text -> Result - 659. -- #aql7qk3iud6vs4cvu43aimopoosgk0fnipibdkc3so13adencmibgfn0u5c01r0adei55nkl3ttsjhl8gbj7tr4gnpj63g64ftbq6s0#1 + 661. -- #aql7qk3iud6vs4cvu43aimopoosgk0fnipibdkc3so13adencmibgfn0u5c01r0adei55nkl3ttsjhl8gbj7tr4gnpj63g64ftbq6s0#1 builtin.Test.Result.Ok : Text -> Result - 660. -- ##Text + 662. -- ##Text builtin type builtin.Text - 661. -- ##Text.!= + 663. -- ##Text.!= builtin.Text.!= : Text -> Text -> Boolean - 662. -- ##Text.++ + 664. -- ##Text.++ builtin.Text.++ : Text -> Text -> Text - 663. -- #nv11qo7s2lqirk3qb44jkm3q3fb6i3mn72ji2c52eubh3kufrdumanblh2bnql1o24efdhmue0v21gd7d1p5ec9j6iqrmekas0183do + 665. -- #nv11qo7s2lqirk3qb44jkm3q3fb6i3mn72ji2c52eubh3kufrdumanblh2bnql1o24efdhmue0v21gd7d1p5ec9j6iqrmekas0183do builtin.Text.alignLeftWith : Nat -> Char -> Text -> Text - 664. -- #ebeq250fdoigvu89fneb4c24f8f18eotc8kocdmosn4ri9shoeeg7ofkejts6clm5c6bifce66qtr0vpfkrhuup2en3khous41hp8rg + 666. -- #ebeq250fdoigvu89fneb4c24f8f18eotc8kocdmosn4ri9shoeeg7ofkejts6clm5c6bifce66qtr0vpfkrhuup2en3khous41hp8rg builtin.Text.alignRightWith : Nat -> Char -> Text -> Text - 665. -- ##Text.drop + 667. -- ##Text.drop builtin.Text.drop : Nat -> Text -> Text - 666. -- ##Text.empty + 668. -- ##Text.empty builtin.Text.empty : Text - 667. -- ##Text.== + 669. -- ##Text.== builtin.Text.eq : Text -> Text -> Boolean - 668. -- ##Text.fromCharList + 670. -- ##Text.fromCharList builtin.Text.fromCharList : [Char] -> Text - 669. -- ##Text.fromUtf8.impl.v3 + 671. -- ##Text.fromUtf8.impl.v3 builtin.Text.fromUtf8.impl : Bytes -> Either Failure Text - 670. -- ##Text.> + 672. -- ##Text.> builtin.Text.gt : Text -> Text -> Boolean - 671. -- ##Text.>= + 673. -- ##Text.>= builtin.Text.gteq : Text -> Text -> Boolean - 672. -- ##Text.indexOf + 674. -- ##Text.indexOf builtin.Text.indexOf : Text -> Text -> Optional Nat - 673. -- ##Text.< + 675. -- ##Text.< builtin.Text.lt : Text -> Text -> Boolean - 674. -- ##Text.<= + 676. -- ##Text.<= builtin.Text.lteq : Text -> Text -> Boolean - 675. -- ##Text.patterns.anyChar + 677. -- ##Text.patterns.anyChar builtin.Text.patterns.anyChar : Pattern Text - 676. -- ##Text.patterns.char + 678. -- ##Text.patterns.char builtin.Text.patterns.char : Class -> Pattern Text - 677. -- ##Text.patterns.charIn + 679. -- ##Text.patterns.charIn builtin.Text.patterns.charIn : [Char] -> Pattern Text - 678. -- ##Text.patterns.charRange + 680. -- ##Text.patterns.charRange builtin.Text.patterns.charRange : Char -> Char -> Pattern Text - 679. -- ##Text.patterns.digit + 681. -- ##Text.patterns.digit builtin.Text.patterns.digit : Pattern Text - 680. -- ##Text.patterns.eof + 682. -- ##Text.patterns.eof builtin.Text.patterns.eof : Pattern Text - 681. -- ##Text.patterns.letter + 683. -- ##Text.patterns.letter builtin.Text.patterns.letter : Pattern Text - 682. -- ##Text.patterns.literal + 684. -- ##Text.patterns.literal builtin.Text.patterns.literal : Text -> Pattern Text - 683. -- ##Text.patterns.notCharIn + 685. -- ##Text.patterns.notCharIn builtin.Text.patterns.notCharIn : [Char] -> Pattern Text - 684. -- ##Text.patterns.notCharRange + 686. -- ##Text.patterns.notCharRange builtin.Text.patterns.notCharRange : Char -> Char -> Pattern Text - 685. -- ##Text.patterns.punctuation + 687. -- ##Text.patterns.punctuation builtin.Text.patterns.punctuation : Pattern Text - 686. -- ##Text.patterns.space + 688. -- ##Text.patterns.space builtin.Text.patterns.space : Pattern Text - 687. -- ##Text.repeat + 689. -- ##Text.repeat builtin.Text.repeat : Nat -> Text -> Text - 688. -- ##Text.reverse + 690. -- ##Text.reverse builtin.Text.reverse : Text -> Text - 689. -- ##Text.size + 691. -- ##Text.size builtin.Text.size : Text -> Nat - 690. -- ##Text.take + 692. -- ##Text.take builtin.Text.take : Nat -> Text -> Text - 691. -- ##Text.toCharList + 693. -- ##Text.toCharList builtin.Text.toCharList : Text -> [Char] - 692. -- ##Text.toLowercase + 694. -- ##Text.toLowercase builtin.Text.toLowercase : Text -> Text - 693. -- ##Text.toUppercase + 695. -- ##Text.toUppercase builtin.Text.toUppercase : Text -> Text - 694. -- ##Text.toUtf8 + 696. -- ##Text.toUtf8 builtin.Text.toUtf8 : Text -> Bytes - 695. -- ##Text.uncons + 697. -- ##Text.uncons builtin.Text.uncons : Text -> Optional (Char, Text) - 696. -- ##Text.unsnoc + 698. -- ##Text.unsnoc builtin.Text.unsnoc : Text -> Optional (Text, Char) - 697. -- ##ThreadId.toText + 699. -- ##ThreadId.toText builtin.ThreadId.toText : ThreadId -> Text - 698. -- ##todo + 700. -- ##todo builtin.todo : a -> b - 699. -- #2lg4ah6ir6t129m33d7gssnigacral39qdamo20mn6r2vefliubpeqnjhejai9ekjckv0qnu9mlu3k9nbpfhl2schec4dohn7rjhjt8 + 701. -- #2lg4ah6ir6t129m33d7gssnigacral39qdamo20mn6r2vefliubpeqnjhejai9ekjckv0qnu9mlu3k9nbpfhl2schec4dohn7rjhjt8 structural type builtin.Tuple a b - 700. -- #2lg4ah6ir6t129m33d7gssnigacral39qdamo20mn6r2vefliubpeqnjhejai9ekjckv0qnu9mlu3k9nbpfhl2schec4dohn7rjhjt8#0 + 702. -- #2lg4ah6ir6t129m33d7gssnigacral39qdamo20mn6r2vefliubpeqnjhejai9ekjckv0qnu9mlu3k9nbpfhl2schec4dohn7rjhjt8#0 builtin.Tuple.Cons : a -> b -> Tuple a b - 701. -- #00nv2kob8fp11qdkr750rlppf81cda95m3q0niohj1pvljnjl4r3hqrhvp1un2p40ptgkhhsne7hocod90r3qdlus9guivh7j3qcq0g + 703. -- #00nv2kob8fp11qdkr750rlppf81cda95m3q0niohj1pvljnjl4r3hqrhvp1un2p40ptgkhhsne7hocod90r3qdlus9guivh7j3qcq0g structural type builtin.Unit - 702. -- #00nv2kob8fp11qdkr750rlppf81cda95m3q0niohj1pvljnjl4r3hqrhvp1un2p40ptgkhhsne7hocod90r3qdlus9guivh7j3qcq0g#0 + 704. -- #00nv2kob8fp11qdkr750rlppf81cda95m3q0niohj1pvljnjl4r3hqrhvp1un2p40ptgkhhsne7hocod90r3qdlus9guivh7j3qcq0g#0 builtin.Unit.Unit : () - 703. -- ##Universal.< + 705. -- ##Universal.< builtin.Universal.< : a -> a -> Boolean - 704. -- ##Universal.<= + 706. -- ##Universal.<= builtin.Universal.<= : a -> a -> Boolean - 705. -- ##Universal.== + 707. -- ##Universal.== builtin.Universal.== : a -> a -> Boolean - 706. -- ##Universal.> + 708. -- ##Universal.> builtin.Universal.> : a -> a -> Boolean - 707. -- ##Universal.>= + 709. -- ##Universal.>= builtin.Universal.>= : a -> a -> Boolean - 708. -- ##Universal.compare + 710. -- ##Universal.compare builtin.Universal.compare : a -> a -> Int - 709. -- ##Universal.murmurHash + 711. -- ##Universal.murmurHash builtin.Universal.murmurHash : a -> Nat - 710. -- ##unsafe.coerceAbilities + 712. -- ##unsafe.coerceAbilities builtin.unsafe.coerceAbilities : (a ->{e1} b) -> a -> b - 711. -- ##Value + 713. -- ##Value builtin type builtin.Value - 712. -- ##Value.dependencies + 714. -- ##Value.dependencies builtin.Value.dependencies : Value -> [Link.Term] - 713. -- ##Value.deserialize + 715. -- ##Value.deserialize builtin.Value.deserialize : Bytes -> Either Text Value - 714. -- ##Value.load + 716. -- ##Value.load builtin.Value.load : Value ->{IO} Either [Link.Term] a - 715. -- ##Value.serialize + 717. -- ##Value.serialize builtin.Value.serialize : Value -> Bytes - 716. -- ##Value.value + 718. -- ##Value.value builtin.Value.value : a -> Value - 717. -- #dem6aglnj8cppfrnq9qipl7geo5pim3auo9cmv1rhh5la9edalj19sspbpm1pd4vh0plokdh6qfo48gs034dqlg0s7j9fhr9p9ndtpo + 719. -- #dem6aglnj8cppfrnq9qipl7geo5pim3auo9cmv1rhh5la9edalj19sspbpm1pd4vh0plokdh6qfo48gs034dqlg0s7j9fhr9p9ndtpo unique type builtin.Year - 718. -- #dem6aglnj8cppfrnq9qipl7geo5pim3auo9cmv1rhh5la9edalj19sspbpm1pd4vh0plokdh6qfo48gs034dqlg0s7j9fhr9p9ndtpo#0 + 720. -- #dem6aglnj8cppfrnq9qipl7geo5pim3auo9cmv1rhh5la9edalj19sspbpm1pd4vh0plokdh6qfo48gs034dqlg0s7j9fhr9p9ndtpo#0 builtin.Year.Year : Nat -> Year - 719. -- #iur47o4jj4v554bfjsu95t8eru2vtko62d4jo4kvvt0mqnshtbleit15dlj1gkrpmokmf2pbegon8cof7600mv9s0m9229uk19bdvgg + 721. -- #iur47o4jj4v554bfjsu95t8eru2vtko62d4jo4kvvt0mqnshtbleit15dlj1gkrpmokmf2pbegon8cof7600mv9s0m9229uk19bdvgg cache : [(Link.Term, Code)] ->{IO, Exception} () - 720. -- #okolgrio28p1mbl1bfjfs9qtsr1m9upblcm3ul872gcir6epkcbq619vk5bdq1fnr371nelsof6jsp8469g4j6f0gg3007p79o4kf18 + 722. -- #okolgrio28p1mbl1bfjfs9qtsr1m9upblcm3ul872gcir6epkcbq619vk5bdq1fnr371nelsof6jsp8469g4j6f0gg3007p79o4kf18 check : Text -> Boolean ->{Stream Result} () - 721. -- #je42vk6rsefjlup01e1fmmdssf5i3ba9l6aka3bipggetfm8o4i8d1q5d7hddggu5jure1bu5ot8aq5in31to4788ctrtpb44ri83r8 + 723. -- #je42vk6rsefjlup01e1fmmdssf5i3ba9l6aka3bipggetfm8o4i8d1q5d7hddggu5jure1bu5ot8aq5in31to4788ctrtpb44ri83r8 checks : [Boolean] -> [Result] - 722. -- #jf82mm2gvoc3h5ibpejfeohkrl8022m38mi14r08v8s4np9187smglvtbk8u109ri427af2j5fuv1an6lq2k718vgtvr0c4rt9t32vg + 724. -- #jf82mm2gvoc3h5ibpejfeohkrl8022m38mi14r08v8s4np9187smglvtbk8u109ri427af2j5fuv1an6lq2k718vgtvr0c4rt9t32vg clientSocket : Text -> Text ->{IO, Exception} Socket - 723. -- #72auim6cvu5tl8ubmfj5m2p1a822m0jq6fmi8osd99ujbs9h20o3t9e47hcitdcku1e7d40r052sdmfgi1oktio9is8tf503f5unh7g + 725. -- #72auim6cvu5tl8ubmfj5m2p1a822m0jq6fmi8osd99ujbs9h20o3t9e47hcitdcku1e7d40r052sdmfgi1oktio9is8tf503f5unh7g closeFile : Handle ->{IO, Exception} () - 724. -- #nsvn5rj51knr3j62dp1ki0glb01bqj3ccq4537e1hgl2m89o9v7ghc54bu12r515mum791tcf4vgsrb6b1csa0tol1ldkiqrb8akkpo + 726. -- #nsvn5rj51knr3j62dp1ki0glb01bqj3ccq4537e1hgl2m89o9v7ghc54bu12r515mum791tcf4vgsrb6b1csa0tol1ldkiqrb8akkpo closeSocket : Socket ->{IO, Exception} () - 725. -- #ei73jot64ogu4q76rm3jecdn76vmrj0h7riqqecf1d439mjav7ehh0h7rol5s18nupv586ln3l0m4kmh99p5mhgv6qfcrfgilkgq1oo + 727. -- #ei73jot64ogu4q76rm3jecdn76vmrj0h7riqqecf1d439mjav7ehh0h7rol5s18nupv586ln3l0m4kmh99p5mhgv6qfcrfgilkgq1oo Code.transitiveDeps : Link.Term ->{IO} [(Link.Term, Code)] - 726. -- #srpc2uag5p1grvshbcm3urjntakgi3g3dthfse2cp38sd6uestd5neseces5ue7kum2ca0gsg9i0cilkl0gn8dn3q5dn86v4r8lbha0 + 728. -- #srpc2uag5p1grvshbcm3urjntakgi3g3dthfse2cp38sd6uestd5neseces5ue7kum2ca0gsg9i0cilkl0gn8dn3q5dn86v4r8lbha0 compose : ∀ i1 g1 o i g. (i1 ->{g1} o) -> (i ->{g} i1) -> i ->{g1, g} o - 727. -- #stnrk323b8mm7dknlonfl70epd9f9ede60iom7sgok31mmggnic7etgi0are2uccs9g429qo3ruaeb9tk90bh35obnce1038p5qe6co + 729. -- #stnrk323b8mm7dknlonfl70epd9f9ede60iom7sgok31mmggnic7etgi0are2uccs9g429qo3ruaeb9tk90bh35obnce1038p5qe6co compose2 : ∀ i2 g2 o i1 g1 i g. (i2 ->{g2} o) -> (i1 ->{g1} i ->{g} i2) @@ -2539,7 +2547,7 @@ This transcript is intended to make visible accidental changes to the hashing al -> i ->{g2, g1, g} o - 728. -- #mrc183aovjcae3i03r1a0ia26crmmkcf2e723pda860ps6q11rancsenjoqhc3fn0eraih1mobcvt245jr77l27uoujqa452utq8p68 + 730. -- #mrc183aovjcae3i03r1a0ia26crmmkcf2e723pda860ps6q11rancsenjoqhc3fn0eraih1mobcvt245jr77l27uoujqa452utq8p68 compose3 : ∀ i3 g3 o i2 g2 i1 g1 i g. (i3 ->{g3} o) -> (i2 ->{g2} i1 ->{g1} i ->{g} i3) @@ -2548,334 +2556,334 @@ This transcript is intended to make visible accidental changes to the hashing al -> i ->{g3, g2, g1, g} o - 729. -- #ilkeid6l866bmq90d2v1ilqp9dsjo6ucmf8udgrokq3nr3mo9skl2vao2mo7ish136as52rsf19u9v3jkmd85bl08gnmamo4e5v2fqo + 731. -- #ilkeid6l866bmq90d2v1ilqp9dsjo6ucmf8udgrokq3nr3mo9skl2vao2mo7ish136as52rsf19u9v3jkmd85bl08gnmamo4e5v2fqo contains : Text -> Text -> Boolean - 730. -- #tc40jeeetbig6vcl7j6v1n0o59r8ugmjkhi6tee6o5fmkkbhmttevg093b29637gb6p70trmh9lrje86hhuuiqq565qs20qmjg4kbk0 + 732. -- #tc40jeeetbig6vcl7j6v1n0o59r8ugmjkhi6tee6o5fmkkbhmttevg093b29637gb6p70trmh9lrje86hhuuiqq565qs20qmjg4kbk0 crawl : [(Link.Term, Code)] -> [Link.Term] ->{IO} [(Link.Term, Code)] - 731. -- #urivjjshp3j122vb412mr5rq7jbf21ij1grh4amk1jfd33nfbcgv4emnnas5ekmblc4j4gsncoofatcdtktv0tp1f8sk8p06occb0hg + 733. -- #urivjjshp3j122vb412mr5rq7jbf21ij1grh4amk1jfd33nfbcgv4emnnas5ekmblc4j4gsncoofatcdtktv0tp1f8sk8p06occb0hg createTempDirectory : Text ->{IO, Exception} Text - 732. -- #h4ob7r10rul2v0dekeqjdfctbqr943ut9fgln5jgdgk0reg5d7ha0nlr16vcgcusfncgmquf5pv048lt3l9k7m653i7m0odmrvl69t0 + 734. -- #h4ob7r10rul2v0dekeqjdfctbqr943ut9fgln5jgdgk0reg5d7ha0nlr16vcgcusfncgmquf5pv048lt3l9k7m653i7m0odmrvl69t0 decodeCert : Bytes ->{Exception} SignedCert - 733. -- #ihbmfc4r7o3391jocjm6v4mojpp3hvt84ivqigrmp34vb5l3d7mmdlvh3hkrtebi812npso7rqo203a59pbs7r2g78ig6jvsv0nva38 + 735. -- #ihbmfc4r7o3391jocjm6v4mojpp3hvt84ivqigrmp34vb5l3d7mmdlvh3hkrtebi812npso7rqo203a59pbs7r2g78ig6jvsv0nva38 delay : Nat ->{IO, Exception} () - 734. -- #donnstdrflrkve7cqi26cqd90kvpdht2gp1q7v5u816a2v0h8uhevh4o618d6cdafqcnia2uqdanpn62sb7nafp77rqavj258vvjdr0 + 736. -- #donnstdrflrkve7cqi26cqd90kvpdht2gp1q7v5u816a2v0h8uhevh4o618d6cdafqcnia2uqdanpn62sb7nafp77rqavj258vvjdr0 directoryContents : Text ->{IO, Exception} [Text] - 735. -- #ac6oh72pmu5gojdaff977lj48f83rr5cuquv2nhll3iiit0hu04dr2nflrvi5chbond10mnplq1d0uqu9i52uc7ebvn3dlqp1n504qg + 737. -- #ac6oh72pmu5gojdaff977lj48f83rr5cuquv2nhll3iiit0hu04dr2nflrvi5chbond10mnplq1d0uqu9i52uc7ebvn3dlqp1n504qg Either.isLeft : Either a b -> Boolean - 736. -- #5n8bp6bvja969upaa6l2l346hab5vhemoa9ehb0n7qjer0kfapvuc7bd5hcugrf2o2auu11e9hstlf2g8uv6h3fn3v8ggmeig4blfe8 + 738. -- #5n8bp6bvja969upaa6l2l346hab5vhemoa9ehb0n7qjer0kfapvuc7bd5hcugrf2o2auu11e9hstlf2g8uv6h3fn3v8ggmeig4blfe8 Either.mapLeft : (i ->{g} o) -> Either i b ->{g} Either o b - 737. -- #jp6itgd1nh1tjn2c7e0ebkskk7sgdooh48e023l1hhkvrkuhrklrdf4omr73jpvnodfbtt4tki495480n0bp54fd0o3hngj8k2knqs8 + 739. -- #jp6itgd1nh1tjn2c7e0ebkskk7sgdooh48e023l1hhkvrkuhrklrdf4omr73jpvnodfbtt4tki495480n0bp54fd0o3hngj8k2knqs8 Either.raiseMessage : v -> Either Text b ->{Exception} b - 738. -- #4pa382t5o39uapf9tncjra8parmg9rppsn9ob3qnnrvbvtqc1oq8g3u69uapbjee9d118v8or3suhc3vu82de7l0c0og5h01beqjnko + 740. -- #4pa382t5o39uapf9tncjra8parmg9rppsn9ob3qnnrvbvtqc1oq8g3u69uapbjee9d118v8or3suhc3vu82de7l0c0og5h01beqjnko evalTest : '{IO, TempDirs, Exception, Stream Result} a ->{IO, Exception} ([Result], a) - 739. -- #4n0fgs00hpsj3paqnm9bfm4nbt9cbrin3hl88i992m9tjiq1ik7eq72asu4hcg885uti36tbnj5rudt56eahhnut1nobofg86pk1bng + 741. -- #4n0fgs00hpsj3paqnm9bfm4nbt9cbrin3hl88i992m9tjiq1ik7eq72asu4hcg885uti36tbnj5rudt56eahhnut1nobofg86pk1bng structural ability Exception structural ability builtin.Exception - 740. -- #ilea09hgph2cdqsiaeup3o58met3e62m61nckvc89v20cq3g5e71pe19idi270o7i0jdfttra51lvi1vhs0g6oluvhavhdetpor74e0 + 742. -- #ilea09hgph2cdqsiaeup3o58met3e62m61nckvc89v20cq3g5e71pe19idi270o7i0jdfttra51lvi1vhs0g6oluvhavhdetpor74e0 Exception.catch : '{g, Exception} a ->{g} Either Failure a - 741. -- #hbhvk2e00l6o7qhn8e7p6dc36bjl7ljm0gn2df5clidlrdoufsig1gt5pjhg72kl67folgg2b892kh9jc1oh0l79h4p8dqhcf1tkde0 + 743. -- #hbhvk2e00l6o7qhn8e7p6dc36bjl7ljm0gn2df5clidlrdoufsig1gt5pjhg72kl67folgg2b892kh9jc1oh0l79h4p8dqhcf1tkde0 Exception.failure : Text -> a -> Failure - 742. -- #4n0fgs00hpsj3paqnm9bfm4nbt9cbrin3hl88i992m9tjiq1ik7eq72asu4hcg885uti36tbnj5rudt56eahhnut1nobofg86pk1bng#0 + 744. -- #4n0fgs00hpsj3paqnm9bfm4nbt9cbrin3hl88i992m9tjiq1ik7eq72asu4hcg885uti36tbnj5rudt56eahhnut1nobofg86pk1bng#0 Exception.raise, builtin.Exception.raise : Failure ->{Exception} x - 743. -- #5mqjoauctm02dlqdc10cc66relu40997d6o1u8fj7vv7g0i2mtacjc83afqhuekll1gkqr9vv4lq7aenanq4kf53kcce4l1srr6ip08 + 745. -- #5mqjoauctm02dlqdc10cc66relu40997d6o1u8fj7vv7g0i2mtacjc83afqhuekll1gkqr9vv4lq7aenanq4kf53kcce4l1srr6ip08 Exception.reraise : Either Failure a ->{Exception} a - 744. -- #eak26rh0k633mbfsj8stppgj1e4l6gest2dfb2ol538l2hcmn1gpspq4vf3g72f1g8jnokfk8uv614cbdvcof0hk21nk2e55jseo18g + 746. -- #eak26rh0k633mbfsj8stppgj1e4l6gest2dfb2ol538l2hcmn1gpspq4vf3g72f1g8jnokfk8uv614cbdvcof0hk21nk2e55jseo18g Exception.toEither : '{ε, Exception} a ->{ε} Either Failure a - 745. -- #g2qp63rds1msu1c3ejqfqnsbhsiigsneuij8eq3kfnv2gdmpqui5g7t0alo1cv6mqqgp36ihvst2jc9t1jp6tnumk18mn5v8m9r3n58 + 747. -- #g2qp63rds1msu1c3ejqfqnsbhsiigsneuij8eq3kfnv2gdmpqui5g7t0alo1cv6mqqgp36ihvst2jc9t1jp6tnumk18mn5v8m9r3n58 Exception.toEither.handler : Request {Exception} a -> Either Failure a - 746. -- #q1e3avumkdpbjalk4v7c5rog11ertc0ra5nlkpgd23n6jmbki58rkebl25cbfbn7i3t274srrpbgont7j12i80hkh3gnt713poo13c8 + 748. -- #q1e3avumkdpbjalk4v7c5rog11ertc0ra5nlkpgd23n6jmbki58rkebl25cbfbn7i3t274srrpbgont7j12i80hkh3gnt713poo13c8 Exception.unsafeRun! : '{g, Exception} a ->{g} a - 747. -- #b6eskvgfv4vr30obfnaegflsf0h8u2t8816d3qhl2hl3r0l794rqgqks67q5hd46qlm06pbgt01439hmmk8jvuu3adc45cra0ggeqhg + 749. -- #b6eskvgfv4vr30obfnaegflsf0h8u2t8816d3qhl2hl3r0l794rqgqks67q5hd46qlm06pbgt01439hmmk8jvuu3adc45cra0ggeqhg expect : Text -> (a -> a -> Boolean) -> a -> a ->{Stream Result} () - 748. -- #6oqh4j31ujgecbu9kionucdbv8mbiiuasqrt294trdbqaoqlm5milniomc2c8jej0e2hco809kdb856djrr12luck2onn5que7kp2eo + 750. -- #6oqh4j31ujgecbu9kionucdbv8mbiiuasqrt294trdbqaoqlm5milniomc2c8jej0e2hco809kdb856djrr12luck2onn5que7kp2eo expectU : Text -> a -> a ->{Stream Result} () - 749. -- #ug02c2qol2gp0af97nuceu59r3jm9f52lro04ahkandkin8sabseuckr6ep0lvuknjlfhhogj9k5m2epp15d0j8bipc8iljgg8at7ho + 751. -- #ug02c2qol2gp0af97nuceu59r3jm9f52lro04ahkandkin8sabseuckr6ep0lvuknjlfhhogj9k5m2epp15d0j8bipc8iljgg8at7ho fail : Text -> b ->{Exception} c - 750. -- #ri1irkdfcdg3a0c3orv23fk2vjda5n0mlp7ooi0hskvaloa8d8qs9i7essti135k0sfomqajspr9idhu2hgjpmmb6etfabj8jdo02a8 + 752. -- #ri1irkdfcdg3a0c3orv23fk2vjda5n0mlp7ooi0hskvaloa8d8qs9i7essti135k0sfomqajspr9idhu2hgjpmmb6etfabj8jdo02a8 fileExists : Text ->{IO, Exception} Boolean - 751. -- #urlf22mo1assv31k95beddq2ava91p953ueg8kdcddofc2ftogrt10jemg760mkcd8m3lnjc3keog8anop0r0kmo2k1lggbt2chse30 + 753. -- #urlf22mo1assv31k95beddq2ava91p953ueg8kdcddofc2ftogrt10jemg760mkcd8m3lnjc3keog8anop0r0kmo2k1lggbt2chse30 first : (a ->{g} b) -> (a, c) ->{g} (b, c) - 752. -- #4rfr9je7fbsithij70iaqofqu4hgl6ji7t06ok0k98a5ni1397di8d0mllef935mdvj0e57hbg6rm9nn6ok5gcnvqr0vmodelli9qqg + 754. -- #4rfr9je7fbsithij70iaqofqu4hgl6ji7t06ok0k98a5ni1397di8d0mllef935mdvj0e57hbg6rm9nn6ok5gcnvqr0vmodelli9qqg fromB32 : Bytes ->{Exception} Bytes - 753. -- #13fpchr37ua0pr38ssr7j22pudmseuedf490aok18upagh0f00kg40guj9pgl916v9qurqrvu53f3lpsvi0s82hg3dtjacanrpjvs38 + 755. -- #13fpchr37ua0pr38ssr7j22pudmseuedf490aok18upagh0f00kg40guj9pgl916v9qurqrvu53f3lpsvi0s82hg3dtjacanrpjvs38 fromHex : Text -> Bytes - 754. -- #od69b4q2upcvsdjhb7ra8unq1r8t7924mra5j5s8f7n173bmslp8dprhgt1mjdj49qj10h2gj91eflke1avj0qlecus1mdevufm3hho + 756. -- #od69b4q2upcvsdjhb7ra8unq1r8t7924mra5j5s8f7n173bmslp8dprhgt1mjdj49qj10h2gj91eflke1avj0qlecus1mdevufm3hho getBuffering : Handle ->{IO, Exception} BufferMode - 755. -- #fupr0p6pmt834qep0jp18h9jhf4uadmtrsndpfac3kpkf4q4foqnqi6dmc6u4mgs9aubl8issknu89taqhi1mvaeg1ctbt3uf2lidh8 + 757. -- #fupr0p6pmt834qep0jp18h9jhf4uadmtrsndpfac3kpkf4q4foqnqi6dmc6u4mgs9aubl8issknu89taqhi1mvaeg1ctbt3uf2lidh8 getBytes : Handle -> Nat ->{IO, Exception} Bytes - 756. -- #qgocu5n2e7urg44ch4m8upn24efh6jk4cmp8bjsvhnenhahq8nniauav0ihpqa31p57v8fhqdep4fh5dj7nj1uul7596us04dr6dqng + 758. -- #qgocu5n2e7urg44ch4m8upn24efh6jk4cmp8bjsvhnenhahq8nniauav0ihpqa31p57v8fhqdep4fh5dj7nj1uul7596us04dr6dqng getChar : Handle ->{IO, Exception} Char - 757. -- #t92if409jh848oifd8v6bbu6o0hd0916rc3rbdlj4vf46oll2tradqrilk6r28mmm19dao5sh8l349qrhc59qopv4u1hba3ndfiitq8 + 759. -- #t92if409jh848oifd8v6bbu6o0hd0916rc3rbdlj4vf46oll2tradqrilk6r28mmm19dao5sh8l349qrhc59qopv4u1hba3ndfiitq8 getEcho : Handle ->{IO, Exception} Boolean - 758. -- #5nc47o8abjut8sab84ltouhiv3mtid9poipn2b53q3bpceebdimb4sb1e7lkrmu3bn3ivgcqe568upqqh5clrqgkhfdsji58kcdrt4g + 760. -- #5nc47o8abjut8sab84ltouhiv3mtid9poipn2b53q3bpceebdimb4sb1e7lkrmu3bn3ivgcqe568upqqh5clrqgkhfdsji58kcdrt4g getLine : Handle ->{IO, Exception} Text - 759. -- #l9pfqiqb3u9o8qo7jnaajph1qh0jbodih4vtuqti53vjmtp4diddidt8r2qa826918bt7b1cf873oo511tkivfkg35fo5o4kh5j35r0 + 761. -- #l9pfqiqb3u9o8qo7jnaajph1qh0jbodih4vtuqti53vjmtp4diddidt8r2qa826918bt7b1cf873oo511tkivfkg35fo5o4kh5j35r0 getSomeBytes : Handle -> Nat ->{IO, Exception} Bytes - 760. -- #mdhva408l4fji5h23okmhk5t4dakt1lokuie28nsdspal45lbhe06vkmcu8hf8jplse56o576ogn72j7k5nbph06nl36o957qn25tvo + 762. -- #mdhva408l4fji5h23okmhk5t4dakt1lokuie28nsdspal45lbhe06vkmcu8hf8jplse56o576ogn72j7k5nbph06nl36o957qn25tvo getTempDirectory : '{IO, Exception} Text - 761. -- #vniqolukf0296u5dc6d68ngfvi9quuuklcsjodnfm0tm8atslq19sidso2uqnbf4g6h23qck69dpd0oceb9539ufoo12rhdcdd934lo + 763. -- #vniqolukf0296u5dc6d68ngfvi9quuuklcsjodnfm0tm8atslq19sidso2uqnbf4g6h23qck69dpd0oceb9539ufoo12rhdcdd934lo handlePosition : Handle ->{IO, Exception} Nat - 762. -- #85s6gvfbpv8lhgq8m36h7ebvan4lljiu2ffehbgese5c11h3vpqlcssts8svi2qo2c5d68oeke092puta1ng84982hiid972hss9m40 + 764. -- #85s6gvfbpv8lhgq8m36h7ebvan4lljiu2ffehbgese5c11h3vpqlcssts8svi2qo2c5d68oeke092puta1ng84982hiid972hss9m40 handshake : Tls ->{IO, Exception} () - 763. -- #128490j1tmitiu3vesv97sqspmefobg1am38vos9p0vt4s1bhki87l7kj4cctquffkp40eanmr9ummfglj9i7s25jrpb32ob5sf2tio + 765. -- #128490j1tmitiu3vesv97sqspmefobg1am38vos9p0vt4s1bhki87l7kj4cctquffkp40eanmr9ummfglj9i7s25jrpb32ob5sf2tio hex : Bytes -> Text - 764. -- #ttjui80dbufvf3vgaddmcr065dpgl0rtp68i5cdht6tq4t2vk3i2vg60hi77rug368qijgijf8oui27te7o5oq0t0osm6dg65c080i0 + 766. -- #ttjui80dbufvf3vgaddmcr065dpgl0rtp68i5cdht6tq4t2vk3i2vg60hi77rug368qijgijf8oui27te7o5oq0t0osm6dg65c080i0 id : a -> a - 765. -- #0lj5fufff9ocn6lfgc3sv23aup971joh61ei6llu7djblug7tmv2avijc91ing6jmm42hu3akdefl1ttdvepk69sc8jslih1g80npg8 + 767. -- #0lj5fufff9ocn6lfgc3sv23aup971joh61ei6llu7djblug7tmv2avijc91ing6jmm42hu3akdefl1ttdvepk69sc8jslih1g80npg8 isDirectory : Text ->{IO, Exception} Boolean - 766. -- #flakrb6iks7vgijtm8dhipj14v57tk96nq5uj3uluplpoamb1etufn7rsjrelaj3letaa0e2aivq95794nv2b8a8vqbqdumd6i0fvpo + 768. -- #flakrb6iks7vgijtm8dhipj14v57tk96nq5uj3uluplpoamb1etufn7rsjrelaj3letaa0e2aivq95794nv2b8a8vqbqdumd6i0fvpo isFileEOF : Handle ->{IO, Exception} Boolean - 767. -- #5qan8ssedn9pouru70v1a06tkivapiv0es8k6v3hjpmkmboekktnh30ia7asmevglf4pu8ujb0t9vsctjsjtam160o9bn9g02uciui8 + 769. -- #5qan8ssedn9pouru70v1a06tkivapiv0es8k6v3hjpmkmboekktnh30ia7asmevglf4pu8ujb0t9vsctjsjtam160o9bn9g02uciui8 isFileOpen : Handle ->{IO, Exception} Boolean - 768. -- #2a11371klrv2i8726knma0l3g14on4m2ucihpg65cjj9k930aefg65ovvg0ak4uv3i9evtnu0a5249q3i8ugheqd65cnmgquc1a88n0 + 770. -- #2a11371klrv2i8726knma0l3g14on4m2ucihpg65cjj9k930aefg65ovvg0ak4uv3i9evtnu0a5249q3i8ugheqd65cnmgquc1a88n0 isNone : Optional a -> Boolean - 769. -- #jsqdsol9g3qnkub2f2ogertbiieldlkqh859vn5qovub6halelfmpv1tc50u1n23kotgd9nnejnn0n6foef8aqfcp615ashd0cfi3j8 + 771. -- #jsqdsol9g3qnkub2f2ogertbiieldlkqh859vn5qovub6halelfmpv1tc50u1n23kotgd9nnejnn0n6foef8aqfcp615ashd0cfi3j8 isSeekable : Handle ->{IO, Exception} Boolean - 770. -- #gop2v9s6l24ii1v6bf1nks2h0h18pato0vbsf4u3el18s7mp1jfnp4c7fesdf9sunnlv5f5a9fjr1s952pte87mf63l1iqki9bp0mio + 772. -- #gop2v9s6l24ii1v6bf1nks2h0h18pato0vbsf4u3el18s7mp1jfnp4c7fesdf9sunnlv5f5a9fjr1s952pte87mf63l1iqki9bp0mio List.all : (a ->{ε} Boolean) -> [a] ->{ε} Boolean - 771. -- #thvdk6pgdi019on95nttjhg3rbqo7aq5lv9fqgehg00657utkitc1k5r9bfl7soqdrqd82tjmesn5ocb6d30ire6vkl0ad6rcppg5vo + 773. -- #thvdk6pgdi019on95nttjhg3rbqo7aq5lv9fqgehg00657utkitc1k5r9bfl7soqdrqd82tjmesn5ocb6d30ire6vkl0ad6rcppg5vo List.filter : (a ->{g} Boolean) -> [a] ->{g} [a] - 772. -- #ca71f74kmn16u76lch7ropsgou2t3lbtc5hr06858l97qkhk0b4ado1pnii4hqfannelbgv4qruv4f1iqn43kgkbsq8lpjmo3mnrp38 + 774. -- #ca71f74kmn16u76lch7ropsgou2t3lbtc5hr06858l97qkhk0b4ado1pnii4hqfannelbgv4qruv4f1iqn43kgkbsq8lpjmo3mnrp38 List.foldLeft : (b ->{g} a ->{g} b) -> b -> [a] ->{g} b - 773. -- #o1gssqn32qvl4pa79a0lko5ksvbn0rtv8u5g9jpd73ig94om2r4nlbcqa4nd968q74ios37eg0ol36776praolimpch8jsbohg47j2o + 775. -- #o1gssqn32qvl4pa79a0lko5ksvbn0rtv8u5g9jpd73ig94om2r4nlbcqa4nd968q74ios37eg0ol36776praolimpch8jsbohg47j2o List.forEach : [a] -> (a ->{e} ()) ->{e} () - 774. -- #atruig2897q7u699k1u4ruou8epfb9qsok7ojkm5om67fhhaqgdi597jr7dvr09h9qndupc49obo4cccir98ei1grfehrcd5qhnkcq0 + 776. -- #atruig2897q7u699k1u4ruou8epfb9qsok7ojkm5om67fhhaqgdi597jr7dvr09h9qndupc49obo4cccir98ei1grfehrcd5qhnkcq0 List.range : Nat -> Nat -> [Nat] - 775. -- #marlqbcbculvqjfro3iidf899g2ncob2f8ld3gosg7kas5t9hlh341d49uh57ff5litvrt0hlb2ms7tj0mkfqs9do67cm4msodt8dng + 777. -- #marlqbcbculvqjfro3iidf899g2ncob2f8ld3gosg7kas5t9hlh341d49uh57ff5litvrt0hlb2ms7tj0mkfqs9do67cm4msodt8dng List.reverse : [a] -> [a] - 776. -- #30hfqasco93u0oipi7irfoabh5uofuu2aeplo2c87p4dg0386si6gvv715dbr21s4ftfquev4baj5ost3h17mt8fajn64mbffp6c8c0 + 778. -- #30hfqasco93u0oipi7irfoabh5uofuu2aeplo2c87p4dg0386si6gvv715dbr21s4ftfquev4baj5ost3h17mt8fajn64mbffp6c8c0 List.unzip : [(a, b)] -> ([a], [b]) - 777. -- #s8l7maltpsr01naqadvs5ssttg7eim4ca2096lbo3f3he1i1b11kk95ahtgb5ukb8cjr6kg4r4c1qrvshk9e8dp5fkq87254gc1pk48 + 779. -- #s8l7maltpsr01naqadvs5ssttg7eim4ca2096lbo3f3he1i1b11kk95ahtgb5ukb8cjr6kg4r4c1qrvshk9e8dp5fkq87254gc1pk48 List.zip : [a] -> [b] -> [(a, b)] - 778. -- #g6g6lhj9upe46032doaeo0ndu8lh1krfkc56gvupeg4a16me5vghhi6bthphnsvgtve9ogl73qab6d69ju6uorpj029g97pjg3p2k2o + 780. -- #g6g6lhj9upe46032doaeo0ndu8lh1krfkc56gvupeg4a16me5vghhi6bthphnsvgtve9ogl73qab6d69ju6uorpj029g97pjg3p2k2o listen : Socket ->{IO, Exception} () - 779. -- #ilva5f9uoaia9l8suc3hl9kh2bg1lah1k7uvm8mlq3mt0b9krdh15kurbhb9pu7a8irmvk6m2lpulg75a5alf0a95u0rp0v0n9folmg + 781. -- #ilva5f9uoaia9l8suc3hl9kh2bg1lah1k7uvm8mlq3mt0b9krdh15kurbhb9pu7a8irmvk6m2lpulg75a5alf0a95u0rp0v0n9folmg loadCodeBytes : Bytes ->{Exception} Code - 780. -- #tjj9c7fbprd57jlnndl8huslhvfbhi1bt1mr45v1fvvr2b3bguhnjtll3lbsbnqqjb290tm9cnuafpbtlfev1csbtjjog0r2kfv0e50 + 782. -- #tjj9c7fbprd57jlnndl8huslhvfbhi1bt1mr45v1fvvr2b3bguhnjtll3lbsbnqqjb290tm9cnuafpbtlfev1csbtjjog0r2kfv0e50 loadSelfContained : Text ->{IO, Exception} a - 781. -- #1pkgu9vbcdl57d9pn9ses1htmfokjq6212ed5oo9jscjkf8t2s407j71287hd9nr1shgsjmn0eunm5e7h262id4hh3t4op6barrvc70 + 783. -- #1pkgu9vbcdl57d9pn9ses1htmfokjq6212ed5oo9jscjkf8t2s407j71287hd9nr1shgsjmn0eunm5e7h262id4hh3t4op6barrvc70 loadValueBytes : Bytes ->{IO, Exception} ([(Link.Term, Code)], Value) - 782. -- #nqodnhhovq1ilb5fstpc61l8omfto62r8s0qq8s4ij39ulorqpgtinef64mullq0ns4914gck6obeuu6so1hds09hh5o1ptpt4k909g + 784. -- #nqodnhhovq1ilb5fstpc61l8omfto62r8s0qq8s4ij39ulorqpgtinef64mullq0ns4914gck6obeuu6so1hds09hh5o1ptpt4k909g MVar.put : MVar i -> i ->{IO, Exception} () - 783. -- #4ck8hqiu4m7478q5p7osqd1g9piie53g2v6j89en9s90f3cnhb9jr2515f35605e18ohiod7nb93t03765cil0lecob3hcsht9870g0 + 785. -- #4ck8hqiu4m7478q5p7osqd1g9piie53g2v6j89en9s90f3cnhb9jr2515f35605e18ohiod7nb93t03765cil0lecob3hcsht9870g0 MVar.read : MVar o ->{IO, Exception} o - 784. -- #tchse01rs4t1e6bk9br5ofad23ahlb9eanlv9nqqlk5eh7rv7qtpd5jmdjrcksm1q3uji64kqblrqq0vgap9tmak3urkr3ok4kg2ci0 + 786. -- #tchse01rs4t1e6bk9br5ofad23ahlb9eanlv9nqqlk5eh7rv7qtpd5jmdjrcksm1q3uji64kqblrqq0vgap9tmak3urkr3ok4kg2ci0 MVar.swap : MVar o -> o ->{IO, Exception} o - 785. -- #23nq5mshk51uktsg3su3mnkr9s4fe3sktf4q388bpsluiik64l8h060qptgfv48r25fcskecmc9t4gdsm8im9fhjf70i1klp34epksg + 787. -- #23nq5mshk51uktsg3su3mnkr9s4fe3sktf4q388bpsluiik64l8h060qptgfv48r25fcskecmc9t4gdsm8im9fhjf70i1klp34epksg MVar.take : MVar o ->{IO, Exception} o - 786. -- #18pqussken2f5u9vuall7ds58cf4fajoc4trf7p93vk4640ia88vsh2lgq9kgu8fvpr86518443ecvn7eo5tessq2hmgs55aiftui8g + 788. -- #18pqussken2f5u9vuall7ds58cf4fajoc4trf7p93vk4640ia88vsh2lgq9kgu8fvpr86518443ecvn7eo5tessq2hmgs55aiftui8g newClient : ClientConfig -> Socket ->{IO, Exception} Tls - 787. -- #mmoj281h8bimgcfqfpfg6mfriu8cta5vva4ppo41ioc6phegdfii26ic2s5sh0lf5tc6o15o7v79ui8eeh2mbicup07tl6hkrq9q34o + 789. -- #mmoj281h8bimgcfqfpfg6mfriu8cta5vva4ppo41ioc6phegdfii26ic2s5sh0lf5tc6o15o7v79ui8eeh2mbicup07tl6hkrq9q34o newServer : ServerConfig -> Socket ->{IO, Exception} Tls - 788. -- #r6l6s6ni7ut1b9le2d84el9dkhqjcjhodhd0l1qsksahm4cbgdk0odjck9jnku08v0pn909kabe2v88p43jisavkariomtgmtrrtbu8 + 790. -- #r6l6s6ni7ut1b9le2d84el9dkhqjcjhodhd0l1qsksahm4cbgdk0odjck9jnku08v0pn909kabe2v88p43jisavkariomtgmtrrtbu8 openFile : Text -> FileMode ->{IO, Exception} Handle - 789. -- #c58qbcgd90d965dokk7bu82uehegkbe8jttm7lv4j0ohgi2qm3e3p4v1qfr8vc2dlsmsl9tv0v71kco8c18mneule0ntrhte4ks1090 + 791. -- #c58qbcgd90d965dokk7bu82uehegkbe8jttm7lv4j0ohgi2qm3e3p4v1qfr8vc2dlsmsl9tv0v71kco8c18mneule0ntrhte4ks1090 printLine : Text ->{IO, Exception} () - 790. -- #dck7pb7qv05ol3b0o76l88a22bc7enl781ton5qbs2umvgsua3p16n22il02m29592oohsnbt3cr7hnlumpdhv2ibjp6iji9te4iot0 + 792. -- #dck7pb7qv05ol3b0o76l88a22bc7enl781ton5qbs2umvgsua3p16n22il02m29592oohsnbt3cr7hnlumpdhv2ibjp6iji9te4iot0 printText : Text ->{IO} Either Failure () - 791. -- #5si7baedo99eap6jgd9krvt7q4ak8s98t4ushnno8mgjp7u9li137ferm3dn11g4k3mds1m8n33sbuodrohstbm9hcqm1937tfj7iq8 + 793. -- #5si7baedo99eap6jgd9krvt7q4ak8s98t4ushnno8mgjp7u9li137ferm3dn11g4k3mds1m8n33sbuodrohstbm9hcqm1937tfj7iq8 putBytes : Handle -> Bytes ->{IO, Exception} () - 792. -- #gkd4pi7uossfe12b19s0mrr0a04v5vvhnfmq3qer3cu7jr24m5v4e1qu59mktrornbrrqgihsvkj1f29je971oqimpngiqgebkr9i58 + 794. -- #gkd4pi7uossfe12b19s0mrr0a04v5vvhnfmq3qer3cu7jr24m5v4e1qu59mktrornbrrqgihsvkj1f29je971oqimpngiqgebkr9i58 readFile : Text ->{IO, Exception} Bytes - 793. -- #ak95mrmd6jhaiikkr42qsvd5lu7au0mpveqm1e347mkr7s4f846apqhh203ei1p3pqi18dcuhuotf53l8p2ivsjs8octc1eenjdqb48 + 795. -- #ak95mrmd6jhaiikkr42qsvd5lu7au0mpveqm1e347mkr7s4f846apqhh203ei1p3pqi18dcuhuotf53l8p2ivsjs8octc1eenjdqb48 ready : Handle ->{IO, Exception} Boolean - 794. -- #gpogpcuoc1dsktoh5t50ofl6dc4vulm0fsqoeevuuoivbrin87ah166b8k8vq3s3977ha0p7np5mn198gglqkjj1gh7nbv31eb7dbqo + 796. -- #gpogpcuoc1dsktoh5t50ofl6dc4vulm0fsqoeevuuoivbrin87ah166b8k8vq3s3977ha0p7np5mn198gglqkjj1gh7nbv31eb7dbqo receive : Tls ->{IO, Exception} Bytes - 795. -- #7rctbhido3s7lm9tjb6dit94cg2jofasr6div31976q840e5va5j6tu6p0pugkt106mcjrtiqndimaknakrnssdo6ul0jef6a9nf1qo + 797. -- #7rctbhido3s7lm9tjb6dit94cg2jofasr6div31976q840e5va5j6tu6p0pugkt106mcjrtiqndimaknakrnssdo6ul0jef6a9nf1qo removeDirectory : Text ->{IO, Exception} () - 796. -- #710k006oln987ch4k1c986sb0jfqtpusp0a235te6cejhns51um6umr311ltgfiv80kt0s8sb8r0ic63gj2nvgbi66vq10s4ilkk5ng + 798. -- #710k006oln987ch4k1c986sb0jfqtpusp0a235te6cejhns51um6umr311ltgfiv80kt0s8sb8r0ic63gj2nvgbi66vq10s4ilkk5ng renameDirectory : Text -> Text ->{IO, Exception} () - 797. -- #vb50tjb967ic3mr4brs0pro9819ftcj4q48eoeal8gmk02f05isuqhn0accbi7rv07g3i4hjgntu2b2r8b9bn15mjc59v10u9c3gjdo + 799. -- #vb50tjb967ic3mr4brs0pro9819ftcj4q48eoeal8gmk02f05isuqhn0accbi7rv07g3i4hjgntu2b2r8b9bn15mjc59v10u9c3gjdo runTest : '{IO, TempDirs, Exception, Stream Result} a ->{IO} [Result] - 798. -- #ub9vp3rs8gh7kj9ksq0dbpoj22r61iq179co8tpgsj9m52n36qha52rm5hlht4hesgqfb8917cp1tk8jhgcft6sufgis6bgemmd57ag + 800. -- #ub9vp3rs8gh7kj9ksq0dbpoj22r61iq179co8tpgsj9m52n36qha52rm5hlht4hesgqfb8917cp1tk8jhgcft6sufgis6bgemmd57ag saveSelfContained : a -> Text ->{IO, Exception} () - 799. -- #6jriif58nb7gbb576kcabft4k4qaa74prd4dpsomokbqceust7p0gu0jlpar4o70qt987lkki2sj1pknkr0ggoif8fcvu2jg2uenqe8 + 801. -- #6jriif58nb7gbb576kcabft4k4qaa74prd4dpsomokbqceust7p0gu0jlpar4o70qt987lkki2sj1pknkr0ggoif8fcvu2jg2uenqe8 saveTestCase : Text -> Text -> (a -> Text) -> a ->{IO, Exception} () - 800. -- #uq87p0r1djq5clhkbimp3fc325e5kp3bv33dc8fpphotdqp95a0ps2c2ch8d2ftdpdualpq2oo9dmnka6kvnc9kvugs2538q62up4t0 + 802. -- #uq87p0r1djq5clhkbimp3fc325e5kp3bv33dc8fpphotdqp95a0ps2c2ch8d2ftdpdualpq2oo9dmnka6kvnc9kvugs2538q62up4t0 seekHandle : Handle -> SeekMode -> Int ->{IO, Exception} () - 801. -- #ftkuro0u0et9ahigdr1k38tl2sl7i0plm7cv5nciccdd71t6a64icla66ss0ufu7llfuj7cuvg3ms4ieel6penfi8gkahb9tm3sfhjo + 803. -- #ftkuro0u0et9ahigdr1k38tl2sl7i0plm7cv5nciccdd71t6a64icla66ss0ufu7llfuj7cuvg3ms4ieel6penfi8gkahb9tm3sfhjo send : Tls -> Bytes ->{IO, Exception} () - 802. -- #k6gmcn3qg50h49gealh8o7j7tp74rvhgn040kftsavd2cldqopcv9945olnooe04cqitgpvekpcbr5ccqjosg7r9gb1lagju5v9ln0o + 804. -- #k6gmcn3qg50h49gealh8o7j7tp74rvhgn040kftsavd2cldqopcv9945olnooe04cqitgpvekpcbr5ccqjosg7r9gb1lagju5v9ln0o serverSocket : Optional Text -> Text ->{IO, Exception} Socket - 803. -- #umje4ibrfv3c6vsjrdkbne1u7c8hg4ll9185m3frqr2rsr8738hp5fq12kepa28h63u9qi23stsegjp1hv0incr5djbl7ulp2s12d8g + 805. -- #umje4ibrfv3c6vsjrdkbne1u7c8hg4ll9185m3frqr2rsr8738hp5fq12kepa28h63u9qi23stsegjp1hv0incr5djbl7ulp2s12d8g setBuffering : Handle -> BufferMode ->{IO, Exception} () - 804. -- #je6s0pdkrg3mvphpg535pubchjd40mepki6ipum7498sma7pll9l89h6de65063bufihf2jb5ihepth2jahir8rs757ggfrnpp7fs7o + 806. -- #je6s0pdkrg3mvphpg535pubchjd40mepki6ipum7498sma7pll9l89h6de65063bufihf2jb5ihepth2jahir8rs757ggfrnpp7fs7o setEcho : Handle -> Boolean ->{IO, Exception} () - 805. -- #in06o7cfgnlmm6pvdtv0jv9hniahcli0fvh27o01ork1p77ro2v51rc05ts1h6p9mtffqld4ufs8klcc4bse1tsj93cu0na0bbiuqb0 + 807. -- #in06o7cfgnlmm6pvdtv0jv9hniahcli0fvh27o01ork1p77ro2v51rc05ts1h6p9mtffqld4ufs8klcc4bse1tsj93cu0na0bbiuqb0 snd : ∀ a1 a. (a1, a) -> a - 806. -- #km3cpkvcnvcos0isfbnb7pb3s45ri5q42n74jmm9c4v1bcu8nlk63353u4ohfr7av4k00s4s180ddnqbam6a01thhlt2tie1hm5a9bo + 808. -- #km3cpkvcnvcos0isfbnb7pb3s45ri5q42n74jmm9c4v1bcu8nlk63353u4ohfr7av4k00s4s180ddnqbam6a01thhlt2tie1hm5a9bo socketAccept : Socket ->{IO, Exception} Socket - 807. -- #ubteu6e7h7om7o40e8mm1rcmp8uur7qn7p5d92gtp3q92rtr459nn3rff4i9q46o2o60tmh77i9vgu0pub768s9kvn9egtcds30nk88 + 809. -- #ubteu6e7h7om7o40e8mm1rcmp8uur7qn7p5d92gtp3q92rtr459nn3rff4i9q46o2o60tmh77i9vgu0pub768s9kvn9egtcds30nk88 socketPort : Socket ->{IO, Exception} Nat - 808. -- #3rp8h0dt7g60nrjdehuhqga9dmomti5rdqho7r1rm5rg5moet7kt3ieempo7c9urur752njachq6k48ggbic4ugbbv75jl2mfbk57a0 + 810. -- #3rp8h0dt7g60nrjdehuhqga9dmomti5rdqho7r1rm5rg5moet7kt3ieempo7c9urur752njachq6k48ggbic4ugbbv75jl2mfbk57a0 startsWith : Text -> Text -> Boolean - 809. -- #elsab3sc7p4c6bj73pgvklv0j7qu268rn5isv6micfp7ib8grjoustpqdq0pkd4a379mr5ijb8duu2q0n040osfurppp8pt8vaue2fo + 811. -- #elsab3sc7p4c6bj73pgvklv0j7qu268rn5isv6micfp7ib8grjoustpqdq0pkd4a379mr5ijb8duu2q0n040osfurppp8pt8vaue2fo stdout : Handle - 810. -- #rfi1v9429f9qluv533l2iba77aadttilrpmnhljfapfnfa6sru2nr8ibpqvib9nc4s4nb9s1as45upsfqfqe6ivqi2p82b2vd866it8 + 812. -- #rfi1v9429f9qluv533l2iba77aadttilrpmnhljfapfnfa6sru2nr8ibpqvib9nc4s4nb9s1as45upsfqfqe6ivqi2p82b2vd866it8 structural ability Stream a - 811. -- #s76vfp9t00khf3bvrg01h9u7gnqj5m62sere8ac97un79ojd82b71q2e0cllj002jn4r2g3qhjft40gkqotgor74v0iogkt3lfftlug + 813. -- #s76vfp9t00khf3bvrg01h9u7gnqj5m62sere8ac97un79ojd82b71q2e0cllj002jn4r2g3qhjft40gkqotgor74v0iogkt3lfftlug Stream.collect : '{e, Stream a} r ->{e} ([a], r) - 812. -- #abc5m7k74em3fk9et4lrj0ee2lsbvp8vp826josen26l1g3lh9ansb47b68efe1vhhi8f6l6kaircd5t4ihlbt0pq4nlipgde9rq8v8 + 814. -- #abc5m7k74em3fk9et4lrj0ee2lsbvp8vp826josen26l1g3lh9ansb47b68efe1vhhi8f6l6kaircd5t4ihlbt0pq4nlipgde9rq8v8 Stream.collect.handler : Request {Stream a} r -> ([a], r) - 813. -- #rfi1v9429f9qluv533l2iba77aadttilrpmnhljfapfnfa6sru2nr8ibpqvib9nc4s4nb9s1as45upsfqfqe6ivqi2p82b2vd866it8#0 + 815. -- #rfi1v9429f9qluv533l2iba77aadttilrpmnhljfapfnfa6sru2nr8ibpqvib9nc4s4nb9s1as45upsfqfqe6ivqi2p82b2vd866it8#0 Stream.emit : a ->{Stream a} () - 814. -- #mrhqdu5he7p8adejmvt4ss09apkbnu8jn66g4lpf0uas9dvm8goa6g65bo2u7s0175hrrofd6uqg7ogmduf928knfpkd12042k6o860 + 816. -- #mrhqdu5he7p8adejmvt4ss09apkbnu8jn66g4lpf0uas9dvm8goa6g65bo2u7s0175hrrofd6uqg7ogmduf928knfpkd12042k6o860 Stream.toList : '{Stream a} r -> [a] - 815. -- #t3klufmrq2bk8gg0o4lukenlmu0dkkcssq9l80m4p3dm6rqesrt51nrebfujfgco9h47f4e5nplmj7rvc3salvs65labd7nvj2fkne8 + 817. -- #t3klufmrq2bk8gg0o4lukenlmu0dkkcssq9l80m4p3dm6rqesrt51nrebfujfgco9h47f4e5nplmj7rvc3salvs65labd7nvj2fkne8 Stream.toList.handler : Request {Stream a} r -> [a] - 816. -- #pus3urtj4e1bhv5p5l16d7vnv4g2hso78pcfussnufkt3d53j7oaqde1ajvijr1g6f0cv2c4ice34g8g8n17hd7hql6hvl8sgcgu6s8 + 818. -- #pus3urtj4e1bhv5p5l16d7vnv4g2hso78pcfussnufkt3d53j7oaqde1ajvijr1g6f0cv2c4ice34g8g8n17hd7hql6hvl8sgcgu6s8 systemTime : '{IO, Exception} Nat - 817. -- #11mhfqj6rts8lm3im7saf44tn3km5bboqtu1td0udnaiit4qqg6ar1ecmccosl6gufsnp6sug3vcmgapsc58sgj7dh7rg8msq2qkj18 + 819. -- #11mhfqj6rts8lm3im7saf44tn3km5bboqtu1td0udnaiit4qqg6ar1ecmccosl6gufsnp6sug3vcmgapsc58sgj7dh7rg8msq2qkj18 structural ability TempDirs - 818. -- #11mhfqj6rts8lm3im7saf44tn3km5bboqtu1td0udnaiit4qqg6ar1ecmccosl6gufsnp6sug3vcmgapsc58sgj7dh7rg8msq2qkj18#0 + 820. -- #11mhfqj6rts8lm3im7saf44tn3km5bboqtu1td0udnaiit4qqg6ar1ecmccosl6gufsnp6sug3vcmgapsc58sgj7dh7rg8msq2qkj18#0 TempDirs.newTempDir : Text ->{TempDirs} Text - 819. -- #11mhfqj6rts8lm3im7saf44tn3km5bboqtu1td0udnaiit4qqg6ar1ecmccosl6gufsnp6sug3vcmgapsc58sgj7dh7rg8msq2qkj18#1 + 821. -- #11mhfqj6rts8lm3im7saf44tn3km5bboqtu1td0udnaiit4qqg6ar1ecmccosl6gufsnp6sug3vcmgapsc58sgj7dh7rg8msq2qkj18#1 TempDirs.removeDir : Text ->{TempDirs} () - 820. -- #ibj0sc16l6bd7r6ptft93jeocitrjod98g210beogdk30t3tb127fbe33vau29j0j4gt8mbs2asfs5rslgk0fl3o4did2t9oa8o5kf8 + 822. -- #ibj0sc16l6bd7r6ptft93jeocitrjod98g210beogdk30t3tb127fbe33vau29j0j4gt8mbs2asfs5rslgk0fl3o4did2t9oa8o5kf8 terminate : Tls ->{IO, Exception} () - 821. -- #iis8ph5ljlq8ijd9jsdlsga91fh1354fii7955l4v52mnvn71cd76maculs0eathrmtfjqh0knbc600kmvq6abj4k2ntnbh5ee10m2o + 823. -- #iis8ph5ljlq8ijd9jsdlsga91fh1354fii7955l4v52mnvn71cd76maculs0eathrmtfjqh0knbc600kmvq6abj4k2ntnbh5ee10m2o testAutoClean : '{IO} [Result] - 822. -- #k1prgid1t9d4fu6f60rct978khcuinkpq49ps95aqaimt2tfoa77fc0c8i3pmc8toeth1s98al3nosaa1mhbh2j2k2nvqivm0ks963o + 824. -- #k1prgid1t9d4fu6f60rct978khcuinkpq49ps95aqaimt2tfoa77fc0c8i3pmc8toeth1s98al3nosaa1mhbh2j2k2nvqivm0ks963o Text.fromUtf8 : Bytes ->{Exception} Text - 823. -- #32q9jqhmi8f08pec3hj0je4u7k52f9f1hdfsmn9ncg2kpki5da9dabigplvdcot3a00k7s5npc4n78psd6ojaumqjla259e9pqd4ov8 + 825. -- #32q9jqhmi8f08pec3hj0je4u7k52f9f1hdfsmn9ncg2kpki5da9dabigplvdcot3a00k7s5npc4n78psd6ojaumqjla259e9pqd4ov8 structural ability Throw e - 824. -- #32q9jqhmi8f08pec3hj0je4u7k52f9f1hdfsmn9ncg2kpki5da9dabigplvdcot3a00k7s5npc4n78psd6ojaumqjla259e9pqd4ov8#0 + 826. -- #32q9jqhmi8f08pec3hj0je4u7k52f9f1hdfsmn9ncg2kpki5da9dabigplvdcot3a00k7s5npc4n78psd6ojaumqjla259e9pqd4ov8#0 Throw.throw : e ->{Throw e} a - 825. -- #f6pkvs6ukf8ngh2j8lm935p1bqadso76o7e3t0j1ukupjh1rg0m1rhtp7u492sq17p3bkbintbnjehc1cqs33qlhnfkoihf5uee4ug0 + 827. -- #f6pkvs6ukf8ngh2j8lm935p1bqadso76o7e3t0j1ukupjh1rg0m1rhtp7u492sq17p3bkbintbnjehc1cqs33qlhnfkoihf5uee4ug0 uncurry : ∀ i1 g1 i g o. (i1 ->{g1} i ->{g} o) -> (i1, i) ->{g1, g} o - 826. -- #u1o44hd0cdlfa8racf458sahdmgea409k8baajgc5k7bqukf2ak5ggs2ped0u3h85v99pgefgb9r7ct2dv4nn9eihjghnqf30p4l57g + 828. -- #u1o44hd0cdlfa8racf458sahdmgea409k8baajgc5k7bqukf2ak5ggs2ped0u3h85v99pgefgb9r7ct2dv4nn9eihjghnqf30p4l57g Value.transitiveDeps : Value ->{IO} [(Link.Term, Code)] - 827. -- #o5bg5el7ckak28ib98j5b6rt26bqbprpddd1brrg3s18qahhbbe3uohufjjnt5eenvtjg0hrvnvpra95jmdppqrovvmcfm1ih2k7guo + 829. -- #o5bg5el7ckak28ib98j5b6rt26bqbprpddd1brrg3s18qahhbbe3uohufjjnt5eenvtjg0hrvnvpra95jmdppqrovvmcfm1ih2k7guo void : x -> () - 828. -- #b4pssu6mf30r4irqj43vvgbc6geq8pp7eg4o2erl948qp3nskp6io5damjj54o2eq9q76mrhsijr1q1d0bna4soed3oggddfvdajaj8 + 830. -- #b4pssu6mf30r4irqj43vvgbc6geq8pp7eg4o2erl948qp3nskp6io5damjj54o2eq9q76mrhsijr1q1d0bna4soed3oggddfvdajaj8 writeFile : Text -> Bytes ->{IO, Exception} () - 829. -- #lcmj2envm11lrflvvcl290lplhvbccv82utoej0lg0eomhmsf2vrv8af17k6if7ff98fp1b13rkseng3fng4stlr495c8dn3gn4k400 + 831. -- #lcmj2envm11lrflvvcl290lplhvbccv82utoej0lg0eomhmsf2vrv8af17k6if7ff98fp1b13rkseng3fng4stlr495c8dn3gn4k400 |> : a -> (a ->{g} t) ->{g} t diff --git a/unison-src/transcripts-using-base/random-deserial.md b/unison-src/transcripts-using-base/random-deserial.md index aea57bf405..b9627543cc 100644 --- a/unison-src/transcripts-using-base/random-deserial.md +++ b/unison-src/transcripts-using-base/random-deserial.md @@ -35,7 +35,10 @@ runTestCase name = hfile = directory ++ name ++ ".v4.hash" p@(f, i) = loadSelfContained sfile - pl@(fl, il) = loadSelfContained lsfile + pl@(fl, il) = + if fileExists lsfile + then loadSelfContained lsfile + else p o = fromUtf8 (readFile ofile) h = readFile hfile diff --git a/unison-src/transcripts-using-base/random-deserial.output.md b/unison-src/transcripts-using-base/random-deserial.output.md index bae2409510..2ff04d103f 100644 --- a/unison-src/transcripts-using-base/random-deserial.output.md +++ b/unison-src/transcripts-using-base/random-deserial.output.md @@ -31,7 +31,10 @@ runTestCase name = hfile = directory ++ name ++ ".v4.hash" p@(f, i) = loadSelfContained sfile - pl@(fl, il) = loadSelfContained lsfile + pl@(fl, il) = + if fileExists lsfile + then loadSelfContained lsfile + else p o = fromUtf8 (readFile ofile) h = readFile hfile @@ -88,8 +91,9 @@ serialTests = do ◉ serialTests case-01 ◉ serialTests case-02 ◉ serialTests case-03 + ◉ serialTests case-04 - ✅ 4 test(s) passing + ✅ 5 test(s) passing Tip: Use view serialTests to view the source of a test. diff --git a/unison-src/transcripts-using-base/serial-test-04.md b/unison-src/transcripts-using-base/serial-test-04.md new file mode 100644 index 0000000000..6d317540ab --- /dev/null +++ b/unison-src/transcripts-using-base/serial-test-04.md @@ -0,0 +1,23 @@ +```ucm:hide +.> builtins.mergeio +``` + +```unison + +mutual0 = cases + 0 -> "okay" + n -> + _ = openFile + mutual1 (drop n 1) + +mutual1 n = + mutual0 n + +mkTestCase = do + saveTestCase "case-04" "v4" mutual1 5 +``` + +```ucm +.> add +.> run mkTestCase +``` diff --git a/unison-src/transcripts-using-base/serial-test-04.output.md b/unison-src/transcripts-using-base/serial-test-04.output.md new file mode 100644 index 0000000000..0addedf7f7 --- /dev/null +++ b/unison-src/transcripts-using-base/serial-test-04.output.md @@ -0,0 +1,41 @@ +```unison +mutual0 = cases + 0 -> "okay" + n -> + _ = openFile + mutual1 (drop n 1) + +mutual1 n = + mutual0 n + +mkTestCase = do + saveTestCase "case-04" "v4" mutual1 5 +``` + +```ucm + + I found and typechecked these definitions in scratch.u. If you + do an `add` or `update`, here's how your codebase would + change: + + ⍟ These new definitions are ok to `add`: + + mkTestCase : '{IO, Exception} () + mutual0 : Nat -> Text + mutual1 : Nat -> Text + +``` +```ucm +.> add + + ⍟ I've added these definitions: + + mkTestCase : '{IO, Exception} () + mutual0 : Nat -> Text + mutual1 : Nat -> Text + +.> run mkTestCase + + () + +``` diff --git a/unison-src/transcripts-using-base/serialized-cases/case-04.out b/unison-src/transcripts-using-base/serialized-cases/case-04.out new file mode 100644 index 0000000000..9f8d6f24e7 --- /dev/null +++ b/unison-src/transcripts-using-base/serialized-cases/case-04.out @@ -0,0 +1 @@ +okay \ No newline at end of file diff --git a/unison-src/transcripts-using-base/serialized-cases/case-04.v4.hash b/unison-src/transcripts-using-base/serialized-cases/case-04.v4.hash new file mode 100644 index 0000000000..acb9258d45 --- /dev/null +++ b/unison-src/transcripts-using-base/serialized-cases/case-04.v4.hash @@ -0,0 +1 @@ +EXAQLMU6IKGAY7DNOHND5VUQQAQPIJN3IVCF5DISOOEVLRQZ3Q2CZOYEVDMY7MYQX2CG6CJFH2HQD6XOMKHQNK5JUZB3G7RZQNREQRQ= \ No newline at end of file diff --git a/unison-src/transcripts-using-base/serialized-cases/case-04.v4.ser b/unison-src/transcripts-using-base/serialized-cases/case-04.v4.ser new file mode 100644 index 0000000000..ac3adef077 --- /dev/null +++ b/unison-src/transcripts-using-base/serialized-cases/case-04.v4.ser @@ -0,0 +1 @@ +AAAAABABAFABKYCFITJNTOQRE3BRWTYOOLZIFGNVKRU5GVLMBALLTNRPXH2ZPF4XNLZYXJVJEXKJWKPQNL7E3K7B2E3V4XY2ROGIXGCG4I3T5ZYZ6UAAAAAAAAAAAAAAAIBQCBIBAFABKYCFITJNTOQRE3BRWTYOOLZIFGNVKRU5GVLMBALLTNRPXH2ZPF4XNLZYXJVJEXKJWKPQNL7E3K7B2E3V4XY2ROGIXGCG4I3T5ZYZ6UAAAAAAAAAAAAAAAIBQEAABEEADVNOCW62AVOZXJ6CMCXMWMTBLF4FFUTLGYPNRXF3BZCNXIDIOZNIAAEAUAFLAIVCNFWN2CETMGG2PBZZPFAUZWVKGTU2VNQEBNONWF647LF4XS5VPHC5GVES5JGZJ6BVP4TNL4HITOXS7DKFYZC4YI3RDOPXHDH2QAAAAAAAAAAAAAABAGBQAAEAQMAAGAABU4YLUAEAAAAAAAAAAAAAHAMCG623BPEAQWAACAEAQGAIBEEAG57PICSIFU224UOLFTG2BAWCL4E7NVW2SJJUAWDIJO7R3YJCNHYQAAAFACAIMAEAAAAAAAAAAAAILAAAQCAIDAEAAQTTBOQXGI4TPOABAEAADAEASCAB2WXBLPNAKXM3U7BGBLWLGJQVS6CS2JVTMHWY3S5Q4RG3UBUHMWUAQCAABAFAAAL7RKMFUH4QQ5G2NTSQN244XUAWGVES3B5ALZMIZQ472Z3Z2SNRY5NY74Q7LRMSAM6YKIY6LXDY4GMGUQNR5G27OEYPJPYTZR5GNAIAAAAAAAAAAAAAAAAAQCQAVMBCUJUWZXIISNQY3J4HHF4UCTG2VI2OTKVWAQFVZWYX3T5MXS6LWV44LU2USLVE3FHYGV7SNVPQ5CN26L4NIXDELTBDOENZ644M7KAAAAAAAAAAAAAAAEAYCAAASCAB2WXBLPNAKXM3U7BGBLWLGJQVS6CS2JVTMHWY3S5Q4RG3UBUHMWUAQCAKACVQEKRGS3G5BCJWDDNHQ44XSQKM3KVDJ2NKWYCAWXG3C7OPVS6LZO2XTROTKSJOUTMU7A2X6JWV6DUJXLZPRVC4MROMENYRXH3TRT5IAAAAAAAAAAAAAAAQDAYAACAIDAEASCAB2WXBLPNAKXM3U7BGBLWLGJQVS6CS2JVTMHWY3S5Q4RG3UBUHMWUAACAABAFAAAL7RKMFUH4QQ5G2NTSQN244XUAWGVES3B5ALZMIZQ472Z3Z2SNRY5NY74Q7LRMSAM6YKIY6LXDY4GMGUQNR5G27OEYPJPYTZR5GNAIAAAAAAAAAAAAAAAAAQCQAVMBCUJUWZXIISNQY3J4HHF4UCTG2VI2OTKVWAQFVZWYX3T5MXS6LWV44LU2USLVE3FHYGV7SNVPQ5CN26L4NIXDELTBDOENZ644M7KAAAAAAAAAAAAAAAEAYCAAASCADO7XUBJEC2NNOKHFSZTNAQLBF6CPW23NJEU2ALBUEXPY54ERGT4IAACAKACVQEKRGS3G5BCJWDDNHQ44XSQKM3KVDJ2NKWYCAWXG3C7OPVS6LZO2XTROTKSJOUTMU7A2X6JWV6DUJXLZPRVC4MROMENYRXH3TRT5IAAAAAAAAAAAAAAAQDAYAAACYAAEAQCAYBAEQQB7ZTWJ7HTBQHKHV76VRKV22ASGMLEU2GTPHIUF5WVZ3MTEG7GMVZAAAAWAACAEAQGAIACNEU6LTPOBSW4RTJNRSS42LNOBWC45RTAABQCAJBADXQNAUFQOHXJTPKPSMQ3IJJCGO7SAOAWDHVWQXMIWYAY7DBUH626AACAEAACAKAAAX7CUYLIPZBB2NU3HFA3VZZPIBMNKJFWD2AXSYRTBZ7VTXTVE3DR23R7ZB6XCZEAZ5QURR4XOHRYMYNJA3D2NV64JQ6S7RHTD2M2AQAAAAAAAAAAAAAAAABAFABKYCFITJNTOQRE3BRWTYOOLZIFGNVKRU5GVLMBALLTNRPXH2ZPF4XNLZYXJVJEXKJWKPQNL7E3K7B2E3V4XY2ROGIXGCG4I3T5ZYZ6UAAAAAAAAAAAAAAAIBQEAABEEAO6BUCQWBY65GN5J6JSDNBFEIZ36IBYCYM6W2C5RC3ADD4MGQ73LYAAEAUAFLAIVCNFWN2CETMGG2PBZZPFAUZWVKGTU2VNQEBNONWF647LF4XS5VPHC5GVES5JGZJ6BVP4TNL4HITOXS7DKFYZC4YI3RDOPXHDH2QAAAAAAAAAAAAAABAGBQAAQAQCAIBBMAACAIBAMAAEAQBAABQABABAAAQCQAAF7YVGC2D6IIOTNGZZIG5OOL2ALDKSJNQ6QF4WEMYOP5M545JGY4OW4P6IPVYWJAGPMFEMPF3R4ODGDKIGY6TNPXCMHUX4J4Y6TGQEAAAAAAAAAAAAAAAAAIBIAKWARKE2LM3UEJGYMNU6DTS6KBJTNKUNHJVK3AIC243ML5Z6WLZPF3K6OF2NKJF2SNST4DK7ZG2XYORG5PF6GULRSFZQRXCG47OOGPVAAAAAAAAAAAAAAACAMBAAAJBAD7THMT6PGDAOUPL75LCVLVUBEMYWJJUNG6ORIL3NLTWZGIN6MZLSAABAFABKYCFITJNTOQRE3BRWTYOOLZIFGNVKRU5GVLMBALLTNRPXH2ZPF4XNLZYXJVJEXKJWKPQNL7E3K7B2E3V4XY2ROGIXGCG4I3T5ZYZ6UAAAAAAAAAAAAAAAIBQMAABAEDAABABIADA6Z4AIF7CZJFJTJVKJO2WEGOJWWKPIBDZ454XRZHXTTXXLQUQ3F726PGQ3QMG3LDJDQLAG5LVZVZCGSQ2FYQWVEV6JOCWJWKTUQT5AABAAAIBAEAACAIBAMCACQBFYD4HAAEOPEY6KWV5SK35RF27KLC64VY4NKCESKIVSPM4WQMVB3WRYSXHRELECCBPXMQZXK54ZO7TPJJTSUMN7XIN6C6D4CBWNAK54AAAAEAAAAIBIAAC74KTBNB7EEHJWTM4UDOXHF5AFRVJEWYPIC6LCGMHH6WO6OUTMOHLOH7EH24LEQDHWCSGHS5Y6HBTBVEDMPJWX3RGD2L6E6MPJTICAAAAAAAAAAAAAAAAAEAUAFLAIVCNFWN2CETMGG2PBZZPFAUZWVKGTU2VNQEBNONWF647LF4XS5VPHC5GVES5JGZJ6BVP4TNL4HITOXS7DKFYZC4YI3RDOPXHDH2QAAAAAAAAAAAAAABAGBIBAFABKYCFITJNTOQRE3BRWTYOOLZIFGNVKRU5GVLMBALLTNRPXH2ZPF4XNLZYXJVJEXKJWKPQNL7E3K7B2E3V4XY2ROGIXGCG4I3T5ZYZ6UAAAAAAAAAAAAAAAIAACIIAHK24FN5UBK5TOT4EYFOZMZGCWLYKLJGWNQ63DOLWDSE3OQGQ5S2QCAAAAAAAAAAAAAAACAKACVQEKRGS3G5BCJWDDNHQ44XSQKM3KVDJ2NKWYCAWXG3C7OPVS6LZO2XTROTKSJOUTMU7A2X6JWV6DUJXLZPRVC4MROMENYRXH3TRT5IAAAAAAAAAAAAAAAQDBACQCAKAAAX7CUYLIPZBB2NU3HFA3VZZPIBMNKJFWD2AXSYRTBZ7VTXTVE3DR23R7ZB6XCZEAZ5QURR4XOHRYMYNJA3D2NV64JQ6S7RHTD2M2AQAAAAAAAAAAAAAAAABAFAAAL7RKMFUH4QQ5G2NTSQN244XUAWGVES3B5ALZMIZQ472Z3Z2SNRY5NY74Q7LRMSAM6YKIY6LXDY4GMGUQNR5G27OEYPJPYTZR5GNAIAAAAAAAAAAAAAAAA====== \ No newline at end of file diff --git a/unison-src/transcripts/alias-many.output.md b/unison-src/transcripts/alias-many.output.md index d454528b8a..c3f1eb4c3a 100644 --- a/unison-src/transcripts/alias-many.output.md +++ b/unison-src/transcripts/alias-many.output.md @@ -417,297 +417,301 @@ Let's try it! 303. builtin type io2.Ref.Ticket 304. io2.Ref.Ticket.read : Ticket a -> a 305. unique type io2.RuntimeFailure - 306. unique type io2.SeekMode - 307. io2.SeekMode.AbsoluteSeek : SeekMode - 308. io2.SeekMode.RelativeSeek : SeekMode - 309. io2.SeekMode.SeekFromEnd : SeekMode - 310. builtin type io2.Socket - 311. unique type io2.StdHandle - 312. io2.StdHandle.StdErr : StdHandle - 313. io2.StdHandle.StdIn : StdHandle - 314. io2.StdHandle.StdOut : StdHandle - 315. builtin type io2.STM - 316. io2.STM.atomically : '{STM} a ->{IO} a - 317. io2.STM.retry : '{STM} a - 318. unique type io2.STMFailure - 319. builtin type io2.ThreadId - 320. unique type io2.ThreadKilledFailure - 321. builtin type io2.Tls - 322. builtin type io2.Tls.Cipher - 323. builtin type io2.Tls.ClientConfig - 324. io2.Tls.ClientConfig.certificates.set : [SignedCert] + 306. io2.sandboxLinks : Term ->{IO} [Term] + 307. unique type io2.SeekMode + 308. io2.SeekMode.AbsoluteSeek : SeekMode + 309. io2.SeekMode.RelativeSeek : SeekMode + 310. io2.SeekMode.SeekFromEnd : SeekMode + 311. builtin type io2.Socket + 312. unique type io2.StdHandle + 313. io2.StdHandle.StdErr : StdHandle + 314. io2.StdHandle.StdIn : StdHandle + 315. io2.StdHandle.StdOut : StdHandle + 316. builtin type io2.STM + 317. io2.STM.atomically : '{STM} a ->{IO} a + 318. io2.STM.retry : '{STM} a + 319. unique type io2.STMFailure + 320. builtin type io2.ThreadId + 321. unique type io2.ThreadKilledFailure + 322. builtin type io2.Tls + 323. builtin type io2.Tls.Cipher + 324. builtin type io2.Tls.ClientConfig + 325. io2.Tls.ClientConfig.certificates.set : [SignedCert] -> ClientConfig -> ClientConfig - 325. io2.TLS.ClientConfig.ciphers.set : [Cipher] + 326. io2.TLS.ClientConfig.ciphers.set : [Cipher] -> ClientConfig -> ClientConfig - 326. io2.Tls.ClientConfig.default : Text + 327. io2.Tls.ClientConfig.default : Text -> Bytes -> ClientConfig - 327. io2.Tls.ClientConfig.versions.set : [Version] + 328. io2.Tls.ClientConfig.versions.set : [Version] -> ClientConfig -> ClientConfig - 328. io2.Tls.decodeCert.impl : Bytes + 329. io2.Tls.decodeCert.impl : Bytes -> Either Failure SignedCert - 329. io2.Tls.decodePrivateKey : Bytes -> [PrivateKey] - 330. io2.Tls.encodeCert : SignedCert -> Bytes - 331. io2.Tls.encodePrivateKey : PrivateKey -> Bytes - 332. io2.Tls.handshake.impl : Tls ->{IO} Either Failure () - 333. io2.Tls.newClient.impl : ClientConfig + 330. io2.Tls.decodePrivateKey : Bytes -> [PrivateKey] + 331. io2.Tls.encodeCert : SignedCert -> Bytes + 332. io2.Tls.encodePrivateKey : PrivateKey -> Bytes + 333. io2.Tls.handshake.impl : Tls ->{IO} Either Failure () + 334. io2.Tls.newClient.impl : ClientConfig -> Socket ->{IO} Either Failure Tls - 334. io2.Tls.newServer.impl : ServerConfig + 335. io2.Tls.newServer.impl : ServerConfig -> Socket ->{IO} Either Failure Tls - 335. builtin type io2.Tls.PrivateKey - 336. io2.Tls.receive.impl : Tls ->{IO} Either Failure Bytes - 337. io2.Tls.send.impl : Tls -> Bytes ->{IO} Either Failure () - 338. builtin type io2.Tls.ServerConfig - 339. io2.Tls.ServerConfig.certificates.set : [SignedCert] + 336. builtin type io2.Tls.PrivateKey + 337. io2.Tls.receive.impl : Tls ->{IO} Either Failure Bytes + 338. io2.Tls.send.impl : Tls -> Bytes ->{IO} Either Failure () + 339. builtin type io2.Tls.ServerConfig + 340. io2.Tls.ServerConfig.certificates.set : [SignedCert] -> ServerConfig -> ServerConfig - 340. io2.Tls.ServerConfig.ciphers.set : [Cipher] + 341. io2.Tls.ServerConfig.ciphers.set : [Cipher] -> ServerConfig -> ServerConfig - 341. io2.Tls.ServerConfig.default : [SignedCert] + 342. io2.Tls.ServerConfig.default : [SignedCert] -> PrivateKey -> ServerConfig - 342. io2.Tls.ServerConfig.versions.set : [Version] + 343. io2.Tls.ServerConfig.versions.set : [Version] -> ServerConfig -> ServerConfig - 343. builtin type io2.Tls.SignedCert - 344. io2.Tls.terminate.impl : Tls ->{IO} Either Failure () - 345. builtin type io2.Tls.Version - 346. unique type io2.TlsFailure - 347. builtin type io2.TVar - 348. io2.TVar.new : a ->{STM} TVar a - 349. io2.TVar.newIO : a ->{IO} TVar a - 350. io2.TVar.read : TVar a ->{STM} a - 351. io2.TVar.readIO : TVar a ->{IO} a - 352. io2.TVar.swap : TVar a -> a ->{STM} a - 353. io2.TVar.write : TVar a -> a ->{STM} () - 354. io2.validateSandboxed : [Term] -> a -> Boolean - 355. unique type IsPropagated - 356. IsPropagated.IsPropagated : IsPropagated - 357. unique type IsTest - 358. IsTest.IsTest : IsTest - 359. unique type Link - 360. builtin type Link.Term - 361. Link.Term : Term -> Link - 362. Link.Term.toText : Term -> Text - 363. builtin type Link.Type - 364. Link.Type : Type -> Link - 365. builtin type List - 366. List.++ : [a] -> [a] -> [a] - 367. List.+: : a -> [a] -> [a] - 368. List.:+ : [a] -> a -> [a] - 369. List.at : Nat -> [a] -> Optional a - 370. List.cons : a -> [a] -> [a] - 371. List.drop : Nat -> [a] -> [a] - 372. List.empty : [a] - 373. List.size : [a] -> Nat - 374. List.snoc : [a] -> a -> [a] - 375. List.take : Nat -> [a] -> [a] - 376. metadata.isPropagated : IsPropagated - 377. metadata.isTest : IsTest - 378. builtin type MutableArray - 379. MutableArray.copyTo! : MutableArray g a + 344. builtin type io2.Tls.SignedCert + 345. io2.Tls.terminate.impl : Tls ->{IO} Either Failure () + 346. builtin type io2.Tls.Version + 347. unique type io2.TlsFailure + 348. builtin type io2.TVar + 349. io2.TVar.new : a ->{STM} TVar a + 350. io2.TVar.newIO : a ->{IO} TVar a + 351. io2.TVar.read : TVar a ->{STM} a + 352. io2.TVar.readIO : TVar a ->{IO} a + 353. io2.TVar.swap : TVar a -> a ->{STM} a + 354. io2.TVar.write : TVar a -> a ->{STM} () + 355. io2.validateSandboxed : [Term] -> a -> Boolean + 356. io2.Value.validateSandboxed : [Term] + -> Value + ->{IO} Either [Term] [Term] + 357. unique type IsPropagated + 358. IsPropagated.IsPropagated : IsPropagated + 359. unique type IsTest + 360. IsTest.IsTest : IsTest + 361. unique type Link + 362. builtin type Link.Term + 363. Link.Term : Term -> Link + 364. Link.Term.toText : Term -> Text + 365. builtin type Link.Type + 366. Link.Type : Type -> Link + 367. builtin type List + 368. List.++ : [a] -> [a] -> [a] + 369. List.+: : a -> [a] -> [a] + 370. List.:+ : [a] -> a -> [a] + 371. List.at : Nat -> [a] -> Optional a + 372. List.cons : a -> [a] -> [a] + 373. List.drop : Nat -> [a] -> [a] + 374. List.empty : [a] + 375. List.size : [a] -> Nat + 376. List.snoc : [a] -> a -> [a] + 377. List.take : Nat -> [a] -> [a] + 378. metadata.isPropagated : IsPropagated + 379. metadata.isTest : IsTest + 380. builtin type MutableArray + 381. MutableArray.copyTo! : MutableArray g a -> Nat -> MutableArray g a -> Nat -> Nat ->{g, Exception} () - 380. MutableArray.freeze : MutableArray g a + 382. MutableArray.freeze : MutableArray g a -> Nat -> Nat ->{g} ImmutableArray a - 381. MutableArray.freeze! : MutableArray g a + 383. MutableArray.freeze! : MutableArray g a ->{g} ImmutableArray a - 382. MutableArray.read : MutableArray g a + 384. MutableArray.read : MutableArray g a -> Nat ->{g, Exception} a - 383. MutableArray.size : MutableArray g a -> Nat - 384. MutableArray.write : MutableArray g a + 385. MutableArray.size : MutableArray g a -> Nat + 386. MutableArray.write : MutableArray g a -> Nat -> a ->{g, Exception} () - 385. builtin type MutableByteArray - 386. MutableByteArray.copyTo! : MutableByteArray g + 387. builtin type MutableByteArray + 388. MutableByteArray.copyTo! : MutableByteArray g -> Nat -> MutableByteArray g -> Nat -> Nat ->{g, Exception} () - 387. MutableByteArray.freeze : MutableByteArray g + 389. MutableByteArray.freeze : MutableByteArray g -> Nat -> Nat ->{g} ImmutableByteArray - 388. MutableByteArray.freeze! : MutableByteArray g + 390. MutableByteArray.freeze! : MutableByteArray g ->{g} ImmutableByteArray - 389. MutableByteArray.read16be : MutableByteArray g + 391. MutableByteArray.read16be : MutableByteArray g -> Nat ->{g, Exception} Nat - 390. MutableByteArray.read24be : MutableByteArray g + 392. MutableByteArray.read24be : MutableByteArray g -> Nat ->{g, Exception} Nat - 391. MutableByteArray.read32be : MutableByteArray g + 393. MutableByteArray.read32be : MutableByteArray g -> Nat ->{g, Exception} Nat - 392. MutableByteArray.read40be : MutableByteArray g + 394. MutableByteArray.read40be : MutableByteArray g -> Nat ->{g, Exception} Nat - 393. MutableByteArray.read64be : MutableByteArray g + 395. MutableByteArray.read64be : MutableByteArray g -> Nat ->{g, Exception} Nat - 394. MutableByteArray.read8 : MutableByteArray g + 396. MutableByteArray.read8 : MutableByteArray g -> Nat ->{g, Exception} Nat - 395. MutableByteArray.size : MutableByteArray g -> Nat - 396. MutableByteArray.write16be : MutableByteArray g + 397. MutableByteArray.size : MutableByteArray g -> Nat + 398. MutableByteArray.write16be : MutableByteArray g -> Nat -> Nat ->{g, Exception} () - 397. MutableByteArray.write32be : MutableByteArray g + 399. MutableByteArray.write32be : MutableByteArray g -> Nat -> Nat ->{g, Exception} () - 398. MutableByteArray.write64be : MutableByteArray g + 400. MutableByteArray.write64be : MutableByteArray g -> Nat -> Nat ->{g, Exception} () - 399. MutableByteArray.write8 : MutableByteArray g + 401. MutableByteArray.write8 : MutableByteArray g -> Nat -> Nat ->{g, Exception} () - 400. builtin type Nat - 401. Nat.* : Nat -> Nat -> Nat - 402. Nat.+ : Nat -> Nat -> Nat - 403. Nat./ : Nat -> Nat -> Nat - 404. Nat.and : Nat -> Nat -> Nat - 405. Nat.complement : Nat -> Nat - 406. Nat.drop : Nat -> Nat -> Nat - 407. Nat.eq : Nat -> Nat -> Boolean - 408. Nat.fromText : Text -> Optional Nat - 409. Nat.gt : Nat -> Nat -> Boolean - 410. Nat.gteq : Nat -> Nat -> Boolean - 411. Nat.increment : Nat -> Nat - 412. Nat.isEven : Nat -> Boolean - 413. Nat.isOdd : Nat -> Boolean - 414. Nat.leadingZeros : Nat -> Nat - 415. Nat.lt : Nat -> Nat -> Boolean - 416. Nat.lteq : Nat -> Nat -> Boolean - 417. Nat.mod : Nat -> Nat -> Nat - 418. Nat.or : Nat -> Nat -> Nat - 419. Nat.popCount : Nat -> Nat - 420. Nat.pow : Nat -> Nat -> Nat - 421. Nat.shiftLeft : Nat -> Nat -> Nat - 422. Nat.shiftRight : Nat -> Nat -> Nat - 423. Nat.sub : Nat -> Nat -> Int - 424. Nat.toFloat : Nat -> Float - 425. Nat.toInt : Nat -> Int - 426. Nat.toText : Nat -> Text - 427. Nat.trailingZeros : Nat -> Nat - 428. Nat.xor : Nat -> Nat -> Nat - 429. structural type Optional a - 430. Optional.None : Optional a - 431. Optional.Some : a -> Optional a - 432. builtin type Pattern - 433. Pattern.capture : Pattern a -> Pattern a - 434. Pattern.isMatch : Pattern a -> a -> Boolean - 435. Pattern.join : [Pattern a] -> Pattern a - 436. Pattern.many : Pattern a -> Pattern a - 437. Pattern.or : Pattern a -> Pattern a -> Pattern a - 438. Pattern.replicate : Nat -> Nat -> Pattern a -> Pattern a - 439. Pattern.run : Pattern a -> a -> Optional ([a], a) - 440. builtin type Ref - 441. Ref.read : Ref g a ->{g} a - 442. Ref.write : Ref g a -> a ->{g} () - 443. builtin type Request - 444. unique type RewriteCase a b - 445. RewriteCase.RewriteCase : a -> b -> RewriteCase a b - 446. unique type Rewrites a - 447. Rewrites.Rewrites : a -> Rewrites a - 448. unique type RewriteSignature a b - 449. RewriteSignature.RewriteSignature : (a -> b -> ()) + 402. builtin type Nat + 403. Nat.* : Nat -> Nat -> Nat + 404. Nat.+ : Nat -> Nat -> Nat + 405. Nat./ : Nat -> Nat -> Nat + 406. Nat.and : Nat -> Nat -> Nat + 407. Nat.complement : Nat -> Nat + 408. Nat.drop : Nat -> Nat -> Nat + 409. Nat.eq : Nat -> Nat -> Boolean + 410. Nat.fromText : Text -> Optional Nat + 411. Nat.gt : Nat -> Nat -> Boolean + 412. Nat.gteq : Nat -> Nat -> Boolean + 413. Nat.increment : Nat -> Nat + 414. Nat.isEven : Nat -> Boolean + 415. Nat.isOdd : Nat -> Boolean + 416. Nat.leadingZeros : Nat -> Nat + 417. Nat.lt : Nat -> Nat -> Boolean + 418. Nat.lteq : Nat -> Nat -> Boolean + 419. Nat.mod : Nat -> Nat -> Nat + 420. Nat.or : Nat -> Nat -> Nat + 421. Nat.popCount : Nat -> Nat + 422. Nat.pow : Nat -> Nat -> Nat + 423. Nat.shiftLeft : Nat -> Nat -> Nat + 424. Nat.shiftRight : Nat -> Nat -> Nat + 425. Nat.sub : Nat -> Nat -> Int + 426. Nat.toFloat : Nat -> Float + 427. Nat.toInt : Nat -> Int + 428. Nat.toText : Nat -> Text + 429. Nat.trailingZeros : Nat -> Nat + 430. Nat.xor : Nat -> Nat -> Nat + 431. structural type Optional a + 432. Optional.None : Optional a + 433. Optional.Some : a -> Optional a + 434. builtin type Pattern + 435. Pattern.capture : Pattern a -> Pattern a + 436. Pattern.isMatch : Pattern a -> a -> Boolean + 437. Pattern.join : [Pattern a] -> Pattern a + 438. Pattern.many : Pattern a -> Pattern a + 439. Pattern.or : Pattern a -> Pattern a -> Pattern a + 440. Pattern.replicate : Nat -> Nat -> Pattern a -> Pattern a + 441. Pattern.run : Pattern a -> a -> Optional ([a], a) + 442. builtin type Ref + 443. Ref.read : Ref g a ->{g} a + 444. Ref.write : Ref g a -> a ->{g} () + 445. builtin type Request + 446. unique type RewriteCase a b + 447. RewriteCase.RewriteCase : a -> b -> RewriteCase a b + 448. unique type Rewrites a + 449. Rewrites.Rewrites : a -> Rewrites a + 450. unique type RewriteSignature a b + 451. RewriteSignature.RewriteSignature : (a -> b -> ()) -> RewriteSignature a b - 450. unique type RewriteTerm a b - 451. RewriteTerm.RewriteTerm : a -> b -> RewriteTerm a b - 452. builtin type Scope - 453. Scope.array : Nat ->{Scope s} MutableArray (Scope s) a - 454. Scope.arrayOf : a + 452. unique type RewriteTerm a b + 453. RewriteTerm.RewriteTerm : a -> b -> RewriteTerm a b + 454. builtin type Scope + 455. Scope.array : Nat ->{Scope s} MutableArray (Scope s) a + 456. Scope.arrayOf : a -> Nat ->{Scope s} MutableArray (Scope s) a - 455. Scope.bytearray : Nat + 457. Scope.bytearray : Nat ->{Scope s} MutableByteArray (Scope s) - 456. Scope.bytearrayOf : Nat + 458. Scope.bytearrayOf : Nat -> Nat ->{Scope s} MutableByteArray (Scope s) - 457. Scope.ref : a ->{Scope s} Ref {Scope s} a - 458. Scope.run : (∀ s. '{g, Scope s} r) ->{g} r - 459. structural type SeqView a b - 460. SeqView.VElem : a -> b -> SeqView a b - 461. SeqView.VEmpty : SeqView a b - 462. Socket.toText : Socket -> Text - 463. unique type Test.Result - 464. Test.Result.Fail : Text -> Result - 465. Test.Result.Ok : Text -> Result - 466. builtin type Text - 467. Text.!= : Text -> Text -> Boolean - 468. Text.++ : Text -> Text -> Text - 469. Text.drop : Nat -> Text -> Text - 470. Text.empty : Text - 471. Text.eq : Text -> Text -> Boolean - 472. Text.fromCharList : [Char] -> Text - 473. Text.fromUtf8.impl : Bytes -> Either Failure Text - 474. Text.gt : Text -> Text -> Boolean - 475. Text.gteq : Text -> Text -> Boolean - 476. Text.indexOf : Text -> Text -> Optional Nat - 477. Text.lt : Text -> Text -> Boolean - 478. Text.lteq : Text -> Text -> Boolean - 479. Text.patterns.anyChar : Pattern Text - 480. Text.patterns.char : Class -> Pattern Text - 481. Text.patterns.charIn : [Char] -> Pattern Text - 482. Text.patterns.charRange : Char -> Char -> Pattern Text - 483. Text.patterns.digit : Pattern Text - 484. Text.patterns.eof : Pattern Text - 485. Text.patterns.letter : Pattern Text - 486. Text.patterns.literal : Text -> Pattern Text - 487. Text.patterns.notCharIn : [Char] -> Pattern Text - 488. Text.patterns.notCharRange : Char -> Char -> Pattern Text - 489. Text.patterns.punctuation : Pattern Text - 490. Text.patterns.space : Pattern Text - 491. Text.repeat : Nat -> Text -> Text - 492. Text.reverse : Text -> Text - 493. Text.size : Text -> Nat - 494. Text.take : Nat -> Text -> Text - 495. Text.toCharList : Text -> [Char] - 496. Text.toLowercase : Text -> Text - 497. Text.toUppercase : Text -> Text - 498. Text.toUtf8 : Text -> Bytes - 499. Text.uncons : Text -> Optional (Char, Text) - 500. Text.unsnoc : Text -> Optional (Text, Char) - 501. ThreadId.toText : ThreadId -> Text - 502. todo : a -> b - 503. structural type Tuple a b - 504. Tuple.Cons : a -> b -> Tuple a b - 505. structural type Unit - 506. Unit.Unit : () - 507. Universal.< : a -> a -> Boolean - 508. Universal.<= : a -> a -> Boolean - 509. Universal.== : a -> a -> Boolean - 510. Universal.> : a -> a -> Boolean - 511. Universal.>= : a -> a -> Boolean - 512. Universal.compare : a -> a -> Int - 513. Universal.murmurHash : a -> Nat - 514. unsafe.coerceAbilities : (a ->{e1} b) -> a -> b - 515. builtin type Value - 516. Value.dependencies : Value -> [Term] - 517. Value.deserialize : Bytes -> Either Text Value - 518. Value.load : Value ->{IO} Either [Term] a - 519. Value.serialize : Value -> Bytes - 520. Value.value : a -> Value + 459. Scope.ref : a ->{Scope s} Ref {Scope s} a + 460. Scope.run : (∀ s. '{g, Scope s} r) ->{g} r + 461. structural type SeqView a b + 462. SeqView.VElem : a -> b -> SeqView a b + 463. SeqView.VEmpty : SeqView a b + 464. Socket.toText : Socket -> Text + 465. unique type Test.Result + 466. Test.Result.Fail : Text -> Result + 467. Test.Result.Ok : Text -> Result + 468. builtin type Text + 469. Text.!= : Text -> Text -> Boolean + 470. Text.++ : Text -> Text -> Text + 471. Text.drop : Nat -> Text -> Text + 472. Text.empty : Text + 473. Text.eq : Text -> Text -> Boolean + 474. Text.fromCharList : [Char] -> Text + 475. Text.fromUtf8.impl : Bytes -> Either Failure Text + 476. Text.gt : Text -> Text -> Boolean + 477. Text.gteq : Text -> Text -> Boolean + 478. Text.indexOf : Text -> Text -> Optional Nat + 479. Text.lt : Text -> Text -> Boolean + 480. Text.lteq : Text -> Text -> Boolean + 481. Text.patterns.anyChar : Pattern Text + 482. Text.patterns.char : Class -> Pattern Text + 483. Text.patterns.charIn : [Char] -> Pattern Text + 484. Text.patterns.charRange : Char -> Char -> Pattern Text + 485. Text.patterns.digit : Pattern Text + 486. Text.patterns.eof : Pattern Text + 487. Text.patterns.letter : Pattern Text + 488. Text.patterns.literal : Text -> Pattern Text + 489. Text.patterns.notCharIn : [Char] -> Pattern Text + 490. Text.patterns.notCharRange : Char -> Char -> Pattern Text + 491. Text.patterns.punctuation : Pattern Text + 492. Text.patterns.space : Pattern Text + 493. Text.repeat : Nat -> Text -> Text + 494. Text.reverse : Text -> Text + 495. Text.size : Text -> Nat + 496. Text.take : Nat -> Text -> Text + 497. Text.toCharList : Text -> [Char] + 498. Text.toLowercase : Text -> Text + 499. Text.toUppercase : Text -> Text + 500. Text.toUtf8 : Text -> Bytes + 501. Text.uncons : Text -> Optional (Char, Text) + 502. Text.unsnoc : Text -> Optional (Text, Char) + 503. ThreadId.toText : ThreadId -> Text + 504. todo : a -> b + 505. structural type Tuple a b + 506. Tuple.Cons : a -> b -> Tuple a b + 507. structural type Unit + 508. Unit.Unit : () + 509. Universal.< : a -> a -> Boolean + 510. Universal.<= : a -> a -> Boolean + 511. Universal.== : a -> a -> Boolean + 512. Universal.> : a -> a -> Boolean + 513. Universal.>= : a -> a -> Boolean + 514. Universal.compare : a -> a -> Int + 515. Universal.murmurHash : a -> Nat + 516. unsafe.coerceAbilities : (a ->{e1} b) -> a -> b + 517. builtin type Value + 518. Value.dependencies : Value -> [Term] + 519. Value.deserialize : Bytes -> Either Text Value + 520. Value.load : Value ->{IO} Either [Term] a + 521. Value.serialize : Value -> Bytes + 522. Value.value : a -> Value .builtin> alias.many 94-104 .mylib diff --git a/unison-src/transcripts/builtins-merge.output.md b/unison-src/transcripts/builtins-merge.output.md index 2164ba8c43..13f10c58a2 100644 --- a/unison-src/transcripts/builtins-merge.output.md +++ b/unison-src/transcripts/builtins-merge.output.md @@ -82,7 +82,7 @@ The `builtins.merge` command adds the known builtins to a `builtin` subnamespace 71. Value/ (5 terms) 72. bug (a -> b) 73. crypto/ (13 terms, 1 type) - 74. io2/ (133 terms, 32 types) + 74. io2/ (135 terms, 32 types) 75. metadata/ (2 terms) 76. todo (a -> b) 77. unsafe/ (1 term) diff --git a/unison-src/transcripts/builtins.md b/unison-src/transcripts/builtins.md index db123f8e2a..66a467fca9 100644 --- a/unison-src/transcripts/builtins.md +++ b/unison-src/transcripts/builtins.md @@ -400,6 +400,11 @@ test> Any.test2 = checks [(not (Any "hi" == Any 42))] openFile1 t = openFile t openFile2 t = openFile1 t +validateSandboxedSimpl ok v = + match Value.validateSandboxed ok v with + Right [] -> true + _ -> false + openFiles = [ not (validateSandboxed [] openFile) , not (validateSandboxed [] openFile1) @@ -416,6 +421,24 @@ openFile] .> add ``` +```unison +openFilesIO = do + checks + [ not (validateSandboxedSimpl [] (value openFile)) + , not (validateSandboxedSimpl [] (value openFile1)) + , not (validateSandboxedSimpl [] (value openFile2)) + , sandboxLinks (termLink openFile) + == sandboxLinks (termLink openFile1) + , sandboxLinks (termLink openFile1) + == sandboxLinks (termLink openFile2) + ] +``` + +```ucm +.> add +.> io.test openFilesIO +``` + ## Universal hash functions Just exercises the function diff --git a/unison-src/transcripts/builtins.output.md b/unison-src/transcripts/builtins.output.md index ca5db7a44c..54cd385717 100644 --- a/unison-src/transcripts/builtins.output.md +++ b/unison-src/transcripts/builtins.output.md @@ -392,6 +392,11 @@ test> Any.test2 = checks [(not (Any "hi" == Any 42))] openFile1 t = openFile t openFile2 t = openFile1 t +validateSandboxedSimpl ok v = + match Value.validateSandboxed ok v with + Right [] -> true + _ -> false + openFiles = [ not (validateSandboxed [] openFile) , not (validateSandboxed [] openFile1) @@ -412,28 +417,77 @@ openFile] ⍟ These new definitions are ok to `add`: - Sandbox.test1 : [Result] - Sandbox.test2 : [Result] - Sandbox.test3 : [Result] - openFile1 : Text -> FileMode ->{IO, Exception} Handle - openFile2 : Text -> FileMode ->{IO, Exception} Handle - openFiles : [Boolean] + Sandbox.test1 : [Result] + Sandbox.test2 : [Result] + Sandbox.test3 : [Result] + openFile1 : Text + -> FileMode + ->{IO, Exception} Handle + openFile2 : Text + -> FileMode + ->{IO, Exception} Handle + openFiles : [Boolean] + validateSandboxedSimpl : [Link.Term] + -> Value + ->{IO} Boolean Now evaluating any watch expressions (lines starting with `>`)... Ctrl+C cancels. - 10 | test> Sandbox.test1 = checks [validateSandboxed [] "hello"] + 15 | test> Sandbox.test1 = checks [validateSandboxed [] "hello"] ✅ Passed Passed - 11 | test> Sandbox.test2 = checks openFiles + 16 | test> Sandbox.test2 = checks openFiles ✅ Passed Passed - 12 | test> Sandbox.test3 = checks [validateSandboxed [termLink openFile.impl] + 17 | test> Sandbox.test3 = checks [validateSandboxed [termLink openFile.impl] ✅ Passed Passed +``` +```unison +openFilesIO = do + checks + [ not (validateSandboxedSimpl [] (value openFile)) + , not (validateSandboxedSimpl [] (value openFile1)) + , not (validateSandboxedSimpl [] (value openFile2)) + , sandboxLinks (termLink openFile) + == sandboxLinks (termLink openFile1) + , sandboxLinks (termLink openFile1) + == sandboxLinks (termLink openFile2) + ] +``` + +```ucm + + I found and typechecked these definitions in scratch.u. If you + do an `add` or `update`, here's how your codebase would + change: + + ⍟ These new definitions are ok to `add`: + + openFilesIO : '{IO} [Result] + +``` +```ucm +.> add + + ⍟ I've added these definitions: + + openFilesIO : '{IO} [Result] + +.> io.test openFilesIO + + New test results: + + ◉ openFilesIO Passed + + ✅ 1 test(s) passing + + Tip: Use view openFilesIO to view the source of a test. + ``` ## Universal hash functions diff --git a/unison-src/transcripts/emptyCodebase.output.md b/unison-src/transcripts/emptyCodebase.output.md index 6a6be83ded..801bdbd958 100644 --- a/unison-src/transcripts/emptyCodebase.output.md +++ b/unison-src/transcripts/emptyCodebase.output.md @@ -23,7 +23,7 @@ Technically, the definitions all exist, but they have no names. `builtins.merge` .foo> ls - 1. builtin/ (450 terms, 70 types) + 1. builtin/ (452 terms, 70 types) ``` And for a limited time, you can get even more builtin goodies: @@ -35,7 +35,7 @@ And for a limited time, you can get even more builtin goodies: .foo> ls - 1. builtin/ (622 terms, 88 types) + 1. builtin/ (624 terms, 88 types) ``` More typically, you'd start out by pulling `base. diff --git a/unison-src/transcripts/merges.output.md b/unison-src/transcripts/merges.output.md index f8216dd60e..470918cc5f 100644 --- a/unison-src/transcripts/merges.output.md +++ b/unison-src/transcripts/merges.output.md @@ -115,13 +115,13 @@ it's still in the `history` of the parent namespace and can be resurrected at an Note: The most recent namespace hash is immediately below this message. - ⊙ 1. #o24otbg67r + ⊙ 1. #1t343opg47 - Deletes: feature1.y - ⊙ 2. #ve08o4q18n + ⊙ 2. #u0keopolln + Adds / updates: @@ -132,26 +132,26 @@ it's still in the `history` of the parent namespace and can be resurrected at an Original name New name(s) feature1.y master.y - ⊙ 3. #7ema4sval7 + ⊙ 3. #pqfuceglge + Adds / updates: feature1.y - ⊙ 4. #o9rvsua82i + ⊙ 4. #lv4fa8fagc > Moves: Original name New name x master.x - ⊙ 5. #0f4f0oq3qu + ⊙ 5. #0ikhemgfs1 + Adds / updates: x - □ 6. #jduh37nsjd (start of history) + □ 6. #g2i4qittkj (start of history) ``` To resurrect an old version of a namespace, you can learn its hash via the `history` command, then use `fork #namespacehash .newname`. diff --git a/unison-src/transcripts/move-namespace.output.md b/unison-src/transcripts/move-namespace.output.md index 65b3b5ab11..18332f001d 100644 --- a/unison-src/transcripts/move-namespace.output.md +++ b/unison-src/transcripts/move-namespace.output.md @@ -269,7 +269,7 @@ I should be able to move the root into a sub-namespace .> ls - 1. root/ (627 terms, 89 types) + 1. root/ (629 terms, 89 types) .> history @@ -278,13 +278,13 @@ I should be able to move the root into a sub-namespace - □ 1. #e3r6i19k88 (start of history) + □ 1. #bo3npg6e0m (start of history) ``` ```ucm .> ls .root.at.path - 1. builtin/ (622 terms, 88 types) + 1. builtin/ (624 terms, 88 types) 2. existing/ (1 term) 3. happy/ (3 terms, 1 type) 4. history/ (1 term) @@ -294,7 +294,7 @@ I should be able to move the root into a sub-namespace Note: The most recent namespace hash is immediately below this message. - ⊙ 1. #8hvnnbnrag + ⊙ 1. #b229p94nrj - Deletes: @@ -305,7 +305,7 @@ I should be able to move the root into a sub-namespace Original name New name existing.a.termInA existing.b.termInA - ⊙ 2. #tv2gubpko5 + ⊙ 2. #2cn8souuq6 + Adds / updates: @@ -317,26 +317,26 @@ I should be able to move the root into a sub-namespace happy.b.termInA existing.a.termInA history.b.termInA existing.a.termInA - ⊙ 3. #ptp8rdk058 + ⊙ 3. #i3loit00cj + Adds / updates: existing.a.termInA existing.b.termInB - ⊙ 4. #u4ac86b1ue + ⊙ 4. #djomgabadc > Moves: Original name New name history.a.termInA history.b.termInA - ⊙ 5. #okibta5ii2 + ⊙ 5. #u6l5c2fe7n - Deletes: history.b.termInB - ⊙ 6. #sq8e9gqt89 + ⊙ 6. #5npm2fkq5r + Adds / updates: @@ -347,13 +347,13 @@ I should be able to move the root into a sub-namespace Original name New name(s) happy.b.termInA history.a.termInA - ⊙ 7. #a3b50hva57 + ⊙ 7. #9b6rfi8qbl + Adds / updates: history.a.termInA history.b.termInB - ⊙ 8. #n5q5rpjjiq + ⊙ 8. #nltcfbjm3i > Moves: @@ -363,7 +363,7 @@ I should be able to move the root into a sub-namespace happy.a.T.T2 happy.b.T.T2 happy.a.termInA happy.b.termInA - ⊙ 9. #c56jfkg5uq + ⊙ 9. #4r8uic569d + Adds / updates: @@ -373,7 +373,7 @@ I should be able to move the root into a sub-namespace happy.a.T.T - ⊙ 10. #ss32n8vbfi + ⊙ 10. #2q4k3759v8 + Adds / updates: @@ -385,7 +385,7 @@ I should be able to move the root into a sub-namespace ⠇ - ⊙ 11. #9gvcfnpaj2 + ⊙ 11. #isl0dl74t4 ``` diff --git a/unison-src/transcripts/name-selection.output.md b/unison-src/transcripts/name-selection.output.md index 07e7ccfffd..e1955b4c9d 100644 --- a/unison-src/transcripts/name-selection.output.md +++ b/unison-src/transcripts/name-selection.output.md @@ -1240,254 +1240,261 @@ d = c + 10 '{g, Scope s} r) ->{g} r - 436. builtin.io2.Clock.internals.sec : TimeSpec + 436. builtin.io2.sandboxLinks : Term + ->{IO} [Term] + 437. builtin.io2.Clock.internals.sec : TimeSpec -> Int - 437. builtin.Char.Class.separator : Class - 438. builtin.Code.serialize : Code + 438. builtin.Char.Class.separator : Class + 439. builtin.Code.serialize : Code -> Bytes - 439. builtin.Value.serialize : Value + 440. builtin.Value.serialize : Value -> Bytes - 440. builtin.io2.Tls.ClientConfig.certificates.set : [SignedCert] + 441. builtin.io2.Tls.ClientConfig.certificates.set : [SignedCert] -> ClientConfig -> ClientConfig - 441. builtin.io2.Tls.ServerConfig.certificates.set : [SignedCert] + 442. builtin.io2.Tls.ServerConfig.certificates.set : [SignedCert] -> ServerConfig -> ServerConfig - 442. builtin.io2.TLS.ClientConfig.ciphers.set : [Cipher] + 443. builtin.io2.TLS.ClientConfig.ciphers.set : [Cipher] -> ClientConfig -> ClientConfig - 443. builtin.io2.Tls.ServerConfig.ciphers.set : [Cipher] + 444. builtin.io2.Tls.ServerConfig.ciphers.set : [Cipher] -> ServerConfig -> ServerConfig - 444. builtin.io2.Tls.ClientConfig.versions.set : [Version] + 445. builtin.io2.Tls.ClientConfig.versions.set : [Version] -> ClientConfig -> ClientConfig - 445. builtin.io2.Tls.ServerConfig.versions.set : [Version] + 446. builtin.io2.Tls.ServerConfig.versions.set : [Version] -> ServerConfig -> ServerConfig - 446. builtin.Int.shiftLeft : Int + 447. builtin.Int.shiftLeft : Int -> Nat -> Int - 447. builtin.Nat.shiftLeft : Nat + 448. builtin.Nat.shiftLeft : Nat -> Nat -> Nat - 448. builtin.Int.shiftRight : Int + 449. builtin.Int.shiftRight : Int -> Nat -> Int - 449. builtin.Nat.shiftRight : Nat + 450. builtin.Nat.shiftRight : Nat -> Nat -> Nat - 450. builtin.Int.signum : Int + 451. builtin.Int.signum : Int -> Int - 451. builtin.Float.sin : Float + 452. builtin.Float.sin : Float -> Float - 452. builtin.Float.sinh : Float + 453. builtin.Float.sinh : Float -> Float - 453. builtin.Bytes.size : Bytes + 454. builtin.Bytes.size : Bytes -> Nat - 454. builtin.ImmutableArray.size : ImmutableArray + 455. builtin.ImmutableArray.size : ImmutableArray a -> Nat - 455. builtin.ImmutableByteArray.size : ImmutableByteArray + 456. builtin.ImmutableByteArray.size : ImmutableByteArray -> Nat - 456. builtin.List.size : [a] + 457. builtin.List.size : [a] -> Nat - 457. builtin.MutableArray.size : MutableArray + 458. builtin.MutableArray.size : MutableArray g a -> Nat - 458. builtin.MutableByteArray.size : MutableByteArray + 459. builtin.MutableByteArray.size : MutableByteArray g -> Nat - 459. builtin.Text.size : Text + 460. builtin.Text.size : Text -> Nat - 460. builtin.Text.patterns.space : Pattern + 461. builtin.Text.patterns.space : Pattern Text - 461. builtin.Float.sqrt : Float + 462. builtin.Float.sqrt : Float -> Float - 462. builtin.io2.IO.process.start : Text + 463. builtin.io2.IO.process.start : Text -> [Text] ->{IO} ( Handle, Handle, Handle, ProcessHandle) - 463. builtin.io2.IO.stdHandle : StdHandle + 464. builtin.io2.IO.stdHandle : StdHandle -> Handle - 464. builtin.Nat.sub : Nat + 465. builtin.Nat.sub : Nat -> Nat -> Int - 465. builtin.io2.TVar.swap : TVar a + 466. builtin.io2.TVar.swap : TVar a -> a ->{STM} a - 466. builtin.Char.Class.symbol : Class - 467. builtin.io2.IO.systemTimeMicroseconds : '{IO} Int - 468. builtin.io2.Clock.internals.systemTimeZone : Int + 467. builtin.Char.Class.symbol : Class + 468. builtin.io2.IO.systemTimeMicroseconds : '{IO} Int + 469. builtin.io2.Clock.internals.systemTimeZone : Int ->{IO} ( Int, Nat, Text) - 469. builtin.Bytes.take : Nat + 470. builtin.Bytes.take : Nat -> Bytes -> Bytes - 470. builtin.List.take : Nat + 471. builtin.List.take : Nat -> [a] -> [a] - 471. builtin.Text.take : Nat + 472. builtin.Text.take : Nat -> Text -> Text - 472. builtin.Float.tan : Float + 473. builtin.Float.tan : Float -> Float - 473. builtin.Float.tanh : Float + 474. builtin.Float.tanh : Float -> Float - 474. builtin.io2.Clock.internals.threadCPUTime : '{IO} Either + 475. builtin.io2.Clock.internals.threadCPUTime : '{IO} Either Failure TimeSpec - 475. builtin.Bytes.toBase16 : Bytes + 476. builtin.Bytes.toBase16 : Bytes -> Bytes - 476. builtin.Bytes.toBase32 : Bytes + 477. builtin.Bytes.toBase32 : Bytes -> Bytes - 477. builtin.Bytes.toBase64 : Bytes + 478. builtin.Bytes.toBase64 : Bytes -> Bytes - 478. builtin.Bytes.toBase64UrlUnpadded : Bytes + 479. builtin.Bytes.toBase64UrlUnpadded : Bytes -> Bytes - 479. builtin.Text.toCharList : Text + 480. builtin.Text.toCharList : Text -> [Char] - 480. builtin.Int.toFloat : Int + 481. builtin.Int.toFloat : Int -> Float - 481. builtin.Nat.toFloat : Nat + 482. builtin.Nat.toFloat : Nat -> Float - 482. builtin.Nat.toInt : Nat + 483. builtin.Nat.toInt : Nat -> Int - 483. builtin.Bytes.toList : Bytes + 484. builtin.Bytes.toList : Bytes -> [Nat] - 484. builtin.Text.toLowercase : Text + 485. builtin.Text.toLowercase : Text -> Text - 485. builtin.Char.toNat : Char + 486. builtin.Char.toNat : Char -> Nat - 486. builtin.Float.toRepresentation : Float + 487. builtin.Float.toRepresentation : Float -> Nat - 487. builtin.Int.toRepresentation : Int + 488. builtin.Int.toRepresentation : Int -> Nat - 488. builtin.Char.toText : Char + 489. builtin.Char.toText : Char -> Text - 489. builtin.Debug.toText : a + 490. builtin.Debug.toText : a -> Optional (Either Text Text) - 490. builtin.Float.toText : Float + 491. builtin.Float.toText : Float -> Text - 491. builtin.Handle.toText : Handle + 492. builtin.Handle.toText : Handle -> Text - 492. builtin.Int.toText : Int + 493. builtin.Int.toText : Int -> Text - 493. builtin.Nat.toText : Nat + 494. builtin.Nat.toText : Nat -> Text - 494. builtin.Socket.toText : Socket + 495. builtin.Socket.toText : Socket -> Text - 495. builtin.Link.Term.toText : Term + 496. builtin.Link.Term.toText : Term -> Text - 496. builtin.ThreadId.toText : ThreadId + 497. builtin.ThreadId.toText : ThreadId -> Text - 497. builtin.Text.toUppercase : Text + 498. builtin.Text.toUppercase : Text -> Text - 498. builtin.Text.toUtf8 : Text + 499. builtin.Text.toUtf8 : Text -> Bytes - 499. builtin.todo : a -> b - 500. builtin.Debug.trace : Text + 500. builtin.todo : a -> b + 501. builtin.Debug.trace : Text -> a -> () - 501. builtin.Int.trailingZeros : Int + 502. builtin.Int.trailingZeros : Int -> Nat - 502. builtin.Nat.trailingZeros : Nat + 503. builtin.Nat.trailingZeros : Nat -> Nat - 503. builtin.Float.truncate : Float + 504. builtin.Float.truncate : Float -> Int - 504. builtin.Int.truncate0 : Int + 505. builtin.Int.truncate0 : Int -> Nat - 505. builtin.io2.IO.tryEval : '{IO} a + 506. builtin.io2.IO.tryEval : '{IO} a ->{IO, Exception} a - 506. builtin.io2.Promise.tryRead : Promise + 507. builtin.io2.Promise.tryRead : Promise a ->{IO} Optional a - 507. builtin.io2.MVar.tryTake : MVar a + 508. builtin.io2.MVar.tryTake : MVar a ->{IO} Optional a - 508. builtin.Text.uncons : Text + 509. builtin.Text.uncons : Text -> Optional ( Char, Text) - 509. builtin.Any.unsafeExtract : Any + 510. builtin.Any.unsafeExtract : Any -> a - 510. builtin.Text.unsnoc : Text + 511. builtin.Text.unsnoc : Text -> Optional ( Text, Char) - 511. builtin.Char.Class.upper : Class - 512. builtin.Code.validate : [( Term, + 512. builtin.Char.Class.upper : Class + 513. builtin.Code.validate : [( Term, Code)] ->{IO} Optional Failure - 513. builtin.Code.validateLinks : [( Term, + 514. builtin.Code.validateLinks : [( Term, Code)] ->{Exception} Either [Term] [Term] - 514. builtin.io2.validateSandboxed : [Term] + 515. builtin.io2.Value.validateSandboxed : [Term] + -> Value + ->{IO} Either + [Term] + [Term] + 516. builtin.io2.validateSandboxed : [Term] -> a -> Boolean - 515. builtin.Value.value : a + 517. builtin.Value.value : a -> Value - 516. builtin.io2.IO.process.wait : ProcessHandle + 518. builtin.io2.IO.process.wait : ProcessHandle ->{IO} Nat - 517. builtin.Debug.watch : Text + 519. builtin.Debug.watch : Text -> a -> a - 518. builtin.Char.Class.whitespace : Class - 519. builtin.MutableArray.write : MutableArray + 520. builtin.Char.Class.whitespace : Class + 521. builtin.MutableArray.write : MutableArray g a -> Nat -> a ->{g, Exception} () - 520. builtin.io2.Promise.write : Promise + 522. builtin.io2.Promise.write : Promise a -> a ->{IO} Boolean - 521. builtin.Ref.write : Ref g a + 523. builtin.Ref.write : Ref g a -> a ->{g} () - 522. builtin.io2.TVar.write : TVar a + 524. builtin.io2.TVar.write : TVar a -> a ->{STM} () - 523. builtin.MutableByteArray.write16be : MutableByteArray + 525. builtin.MutableByteArray.write16be : MutableByteArray g -> Nat -> Nat ->{g, Exception} () - 524. builtin.MutableByteArray.write32be : MutableByteArray + 526. builtin.MutableByteArray.write32be : MutableByteArray g -> Nat -> Nat ->{g, Exception} () - 525. builtin.MutableByteArray.write64be : MutableByteArray + 527. builtin.MutableByteArray.write64be : MutableByteArray g -> Nat -> Nat ->{g, Exception} () - 526. builtin.MutableByteArray.write8 : MutableByteArray + 528. builtin.MutableByteArray.write8 : MutableByteArray g -> Nat -> Nat ->{g, Exception} () - 527. builtin.Int.xor : Int + 529. builtin.Int.xor : Int -> Int -> Int - 528. builtin.Nat.xor : Nat + 530. builtin.Nat.xor : Nat -> Nat -> Nat diff --git a/unison-src/transcripts/reflog.output.md b/unison-src/transcripts/reflog.output.md index 86bb4b9788..daaf398673 100644 --- a/unison-src/transcripts/reflog.output.md +++ b/unison-src/transcripts/reflog.output.md @@ -59,17 +59,17 @@ y = 2 most recent, along with the command that got us there. Try: `fork 2 .old` - `fork #3svj265l6g .old` to make an old namespace + `fork #oggbm00j7t .old` to make an old namespace accessible again, - `reset-root #3svj265l6g` to reset the root namespace and + `reset-root #oggbm00j7t` to reset the root namespace and its history to that of the specified namespace. When Root Hash Action - 1. now #poi4ftidsb add - 2. now #3svj265l6g add - 3. now #imu74ctf2v builtins.merge + 1. now #ahhcpcj4gk add + 2. now #oggbm00j7t add + 3. now #adb3s165os builtins.merge 4. #sg60bvjo91 history starts here Tip: Use `diff.namespace 1 7` to compare namespaces between diff --git a/unison-src/transcripts/reset.output.md b/unison-src/transcripts/reset.output.md index eec50951b5..7c1cb36990 100644 --- a/unison-src/transcripts/reset.output.md +++ b/unison-src/transcripts/reset.output.md @@ -26,13 +26,13 @@ a = 5 Note: The most recent namespace hash is immediately below this message. - ⊙ 1. #65muh384mp + ⊙ 1. #peqesc1c8j + Adds / updates: a - □ 2. #imu74ctf2v (start of history) + □ 2. #adb3s165os (start of history) .> reset 2 @@ -45,7 +45,7 @@ a = 5 - □ 1. #imu74ctf2v (start of history) + □ 1. #adb3s165os (start of history) ``` ```unison @@ -79,13 +79,13 @@ foo.a = 5 Note: The most recent namespace hash is immediately below this message. - ⊙ 1. #5upvuiur50 + ⊙ 1. #ujrlqvm3gc + Adds / updates: foo.a - □ 2. #imu74ctf2v (start of history) + □ 2. #adb3s165os (start of history) .> reset 1 foo diff --git a/unison-src/transcripts/squash.output.md b/unison-src/transcripts/squash.output.md index 32cfd0ba44..16f6f449f7 100644 --- a/unison-src/transcripts/squash.output.md +++ b/unison-src/transcripts/squash.output.md @@ -13,7 +13,7 @@ Let's look at some examples. We'll start with a namespace with just the builtins - □ 1. #94fai72a7n (start of history) + □ 1. #ker7tiq7eq (start of history) .> fork builtin builtin2 @@ -42,21 +42,21 @@ Now suppose we `fork` a copy of builtin, then rename `Nat.+` to `frobnicate`, th Note: The most recent namespace hash is immediately below this message. - ⊙ 1. #i2nla67hnu + ⊙ 1. #8tflepimde > Moves: Original name New name Nat.frobnicate Nat.+ - ⊙ 2. #l9vlpokkkn + ⊙ 2. #6h2ad6r1kn > Moves: Original name New name Nat.+ Nat.frobnicate - □ 3. #94fai72a7n (start of history) + □ 3. #ker7tiq7eq (start of history) ``` If we merge that back into `builtin`, we get that same chain of history: @@ -73,21 +73,21 @@ If we merge that back into `builtin`, we get that same chain of history: Note: The most recent namespace hash is immediately below this message. - ⊙ 1. #i2nla67hnu + ⊙ 1. #8tflepimde > Moves: Original name New name Nat.frobnicate Nat.+ - ⊙ 2. #l9vlpokkkn + ⊙ 2. #6h2ad6r1kn > Moves: Original name New name Nat.+ Nat.frobnicate - □ 3. #94fai72a7n (start of history) + □ 3. #ker7tiq7eq (start of history) ``` Let's try again, but using a `merge.squash` (or just `squash`) instead. The history will be unchanged: @@ -108,7 +108,7 @@ Let's try again, but using a `merge.squash` (or just `squash`) instead. The hist - □ 1. #94fai72a7n (start of history) + □ 1. #ker7tiq7eq (start of history) ``` The churn that happened in `mybuiltin` namespace ended up back in the same spot, so the squash merge of that namespace with our original namespace had no effect. @@ -499,13 +499,13 @@ This checks to see that squashing correctly preserves deletions: Note: The most recent namespace hash is immediately below this message. - ⊙ 1. #4qp4mmddbv + ⊙ 1. #8iaadg1q0i - Deletes: Nat.* Nat.+ - □ 2. #94fai72a7n (start of history) + □ 2. #ker7tiq7eq (start of history) ``` Notice that `Nat.+` and `Nat.*` are deleted by the squash, and we see them deleted in one atomic step in the history.