From a38eb9b5491901a793634cf8fe75a669c7f5b1e2 Mon Sep 17 00:00:00 2001 From: Dan Doel Date: Fri, 26 Sep 2025 20:25:48 -0400 Subject: [PATCH 1/9] Add various bulk array builtins --- parser-typechecker/src/Unison/Builtin.hs | 117 ++++- unison-core/src/Unison/Type.hs | 6 +- unison-runtime/package.yaml | 1 + unison-runtime/src/Unison/Runtime/ANF/POp.hs | 2 + unison-runtime/src/Unison/Runtime/Array.hs | 97 +++- unison-runtime/src/Unison/Runtime/Builtin.hs | 39 ++ unison-runtime/src/Unison/Runtime/Foreign.hs | 4 + .../src/Unison/Runtime/Foreign/Function.hs | 417 ++++++++++++++++++ .../Unison/Runtime/Foreign/Function/Type.hs | 55 +++ unison-runtime/src/Unison/Runtime/MCode.hs | 2 + unison-runtime/src/Unison/Runtime/Machine.hs | 9 + .../src/Unison/Runtime/Serialize.hs | 2 + unison-runtime/src/Unison/Runtime/Stack.hs | 24 +- unison-runtime/unison-runtime.cabal | 1 + 14 files changed, 759 insertions(+), 17 deletions(-) diff --git a/parser-typechecker/src/Unison/Builtin.hs b/parser-typechecker/src/Unison/Builtin.hs index ec11d65e33..06a93da842 100644 --- a/parser-typechecker/src/Unison/Builtin.hs +++ b/parser-typechecker/src/Unison/Builtin.hs @@ -255,7 +255,8 @@ builtinTypesSrc = B' "ClientSockAddr" CT.Data, B' "PinnedByteArray" CT.Data, B' "Integer" CT.Data, - B' "Natural" CT.Data + B' "Natural" CT.Data, + B' "UnboxedArray" CT.Data ] -- rename these to "builtin" later, when builtin means intrinsic as opposed to @@ -676,29 +677,29 @@ builtinsSrc = --> nat --> Type.effect () [g, DD.exceptionType ()] unit, B "ImmutableArray.read" . forall1 "a" $ \a -> - iarrayt a --> nat --> Type.effect1 () (DD.exceptionType ()) a, + iarrayt a --> nat --> exnt a, B "ImmutableByteArray.read8" $ - ibytearrayt --> nat --> Type.effect1 () (DD.exceptionType ()) nat, + ibytearrayt --> nat --> exnt nat, B "ImmutableByteArray.read16be" $ - ibytearrayt --> nat --> Type.effect1 () (DD.exceptionType ()) nat, + ibytearrayt --> nat --> exnt nat, B "ImmutableByteArray.read24be" $ - ibytearrayt --> nat --> Type.effect1 () (DD.exceptionType ()) nat, + ibytearrayt --> nat --> exnt nat, B "ImmutableByteArray.read32be" $ - ibytearrayt --> nat --> Type.effect1 () (DD.exceptionType ()) nat, + ibytearrayt --> nat --> exnt nat, B "ImmutableByteArray.read40be" $ - ibytearrayt --> nat --> Type.effect1 () (DD.exceptionType ()) nat, + ibytearrayt --> nat --> exnt nat, B "ImmutableByteArray.read64be" $ - ibytearrayt --> nat --> Type.effect1 () (DD.exceptionType ()) nat, + ibytearrayt --> nat --> exnt nat, B "ImmutableByteArray.read16le" $ - ibytearrayt --> nat --> Type.effect1 () (DD.exceptionType ()) nat, + ibytearrayt --> nat --> exnt nat, B "ImmutableByteArray.read24le" $ - ibytearrayt --> nat --> Type.effect1 () (DD.exceptionType ()) nat, + ibytearrayt --> nat --> exnt nat, B "ImmutableByteArray.read32le" $ - ibytearrayt --> nat --> Type.effect1 () (DD.exceptionType ()) nat, + ibytearrayt --> nat --> exnt nat, B "ImmutableByteArray.read40le" $ - ibytearrayt --> nat --> Type.effect1 () (DD.exceptionType ()) nat, + ibytearrayt --> nat --> exnt nat, B "ImmutableByteArray.read64le" $ - ibytearrayt --> nat --> Type.effect1 () (DD.exceptionType ()) nat, + ibytearrayt --> nat --> exnt nat, B "MutableArray.freeze!" . forall2 "g" "a" $ \g a -> marrayt g a --> Type.effect1 () g (iarrayt a), B "MutableByteArray.freeze!" . forall1 "g" $ \g -> @@ -798,7 +799,78 @@ builtinsSrc = B "Natural.gteq" $ natural --> natural --> boolean, B "Natural.toFloat" $ natural --> float, B "Natural.isEven" $ natural --> boolean, - B "Natural.isOdd" $ natural --> boolean + B "Natural.isOdd" $ natural --> boolean, + + B "ImmutableArray.at1s" $ + forall2 "a" "b" $ \a b -> iarrayt (pair a b) --> iarrayt a, + B "ImmutableArray.at2s" $ + forall3 "a" "b" "c" $ \a b c -> + iarrayt (pair a (pair b c)) --> iarrayt b, + B "ImmutableArray.chop" $ + forall1 "a" $ \a -> + uarrayt nat --> uarrayt nat --> iarrayt a --> + exnt (iarrayt (iarrayt a)), + B "ImmutableArray.fromListAt1" $ + forall2 "a" "b" $ \a b -> + list (pair a b) --> iarrayt a, + B "ImmutableArray.fromListAt2" $ + forall3 "a" "b" "c" $ \a b c -> + list (pair a (pair b c)) --> iarrayt b, + B "ImmutableArray.fromList" $ + forall1 "a" $ \a -> list a --> iarrayt a, + B "ImmutableArray.intersectIx" $ + forall1 "a" $ \a -> + list a --> list a --> tuple [uarrayt nat, uarrayt nat], + B "ImmutableArray.murmurHashesUntyped" $ + forall1 "a" $ \a -> + iarrayt a --> uarrayt nat, + B "ImmutableArray.outerJoinIx" $ + forall1 "a" $ \a -> + iarrayt a --> iarrayt a --> tuple [uarrayt nat, uarrayt nat], + B "ImmutableArray.pick" $ + forall1 "a" $ \a -> + uarrayt nat --> iarrayt a --> exnt (iarrayt a), + B "ImmutableArray.pick1" $ + forall1 "a" $ \a -> + uarrayt nat --> iarrayt a --> exnt (iarrayt a), + B "ImmutableArray.pick1Or" $ + forall1 "a" $ \a -> + a --> uarrayt nat --> iarrayt a --> exnt (iarrayt a), + B "ImmutableArray.runsIx" $ + forall1 "a" $ \a -> + iarrayt a --> tuple [uarrayt nat, uarrayt nat], + B "ImmutableArray.sortIx" $ + forall1 "a" $ \a -> + iarrayt a --> uarrayt nat, + B "ImmutableArray.toLists" $ + forall1 "a" $ \a -> + iarrayt (iarrayt a) --> iarrayt (list a), + B "ImmutableArray.toList" $ + forall1 "a" $ \a -> + iarrayt a --> list a, + B "ImmutableArray.zipWithAppend" $ + forall1 "a" $ \a -> + iarrayt (list a) --> iarrayt (list a) --> iarrayt (list a), + B "UnboxedArray.fromNatList" $ + list nat --> uarrayt nat, + B "UnboxedArray.modR" $ uarrayt nat --> nat --> uarrayt nat, + B "UnboxedArray.multiplyR" $ uarrayt nat --> nat --> uarrayt nat, + B "UnboxedArray.divideR" $ uarrayt nat --> nat --> uarrayt nat, + B "UnboxedArray.occurrences" $ + uarrayt nat --> iarrayt (uarrayt nat), + B "UnboxedArray.pick" $ + forall1 "a" $ \a -> + uarrayt nat --> uarrayt a --> exnt (uarrayt a), + B "UnboxedArray.pick1" $ + forall1 "a" $ \a -> + uarrayt nat --> uarrayt a --> exnt (uarrayt a), + B "UnboxedArray.pick1Or" $ + forall1 "a" $ \a -> + a --> uarrayt nat --> uarrayt a --> exnt (uarrayt a), + B "UnboxedArray.size" $ + forall1 "a" $ \a -> uarrayt a --> nat, + B "UnboxedArray.toList" $ + forall1 "a" $ \a -> uarrayt a --> list a ] ++ -- avoid name conflicts with Universal == < > <= >= @@ -1118,6 +1190,17 @@ forall2 na nb body = Type.foralls () [a, b] (body ta tb) ta = Type.var () a tb = Type.var () b +forall3 :: + Text -> Text -> Text -> (Type -> Type -> Type -> Type) -> Type +forall3 na nb nc body = Type.foralls () [a,b,c] (body ta tb tc) + where + a = Var.named na + b = Var.named nb + c = Var.named nc + ta = Type.var () a + tb = Type.var () b + tc = Type.var () c + forall4 :: Text -> Text -> @@ -1191,6 +1274,12 @@ iarrayt a = Type.iarrayType () `app` a marrayt :: Type -> Type -> Type marrayt g a = Type.marrayType () `app` g `app` a +uarrayt :: Type -> Type +uarrayt a = Type.uarrayType () `app` a + +exnt :: Type -> Type +exnt = Type.effect1 () (DD.exceptionType ()) + socket, threadId, handle, phandle, unit :: Type socket = Type.socket () threadId = Type.threadId () diff --git a/unison-core/src/Unison/Type.hs b/unison-core/src/Unison/Type.hs index 09568434b8..cdc6592cf2 100644 --- a/unison-core/src/Unison/Type.hs +++ b/unison-core/src/Unison/Type.hs @@ -303,9 +303,10 @@ scopeRef, refRef :: TypeReference scopeRef = Reference.Builtin "Scope" refRef = Reference.Builtin "Ref" -iarrayRef, marrayRef :: TypeReference +iarrayRef, marrayRef, uarrayRef :: TypeReference iarrayRef = Reference.Builtin "ImmutableArray" marrayRef = Reference.Builtin "MutableArray" +uarrayRef = Reference.Builtin "UnboxedArray" ibytearrayRef, mbytearrayRef :: TypeReference ibytearrayRef = Reference.Builtin "ImmutableByteArray" @@ -425,6 +426,9 @@ ibytearrayType a = ref a ibytearrayRef mbytearrayType a = ref a mbytearrayRef pinnedByteArrayType a = ref a pinnedByteArrayRef +uarrayType :: (Ord v) => a -> Type v a +uarrayType a = ref a uarrayRef + socket :: (Ord v) => a -> Type v a socket a = ref a socketRef diff --git a/unison-runtime/package.yaml b/unison-runtime/package.yaml index d3636e1c45..312f3c765f 100644 --- a/unison-runtime/package.yaml +++ b/unison-runtime/package.yaml @@ -104,6 +104,7 @@ library: - unliftio - unordered-containers - vector + - vector-algorithms - crypton-x509 - crypton-x509-store - crypton-x509-system diff --git a/unison-runtime/src/Unison/Runtime/ANF/POp.hs b/unison-runtime/src/Unison/Runtime/ANF/POp.hs index 315d51606e..ceb8cd45ba 100644 --- a/unison-runtime/src/Unison/Runtime/ANF/POp.hs +++ b/unison-runtime/src/Unison/Runtime/ANF/POp.hs @@ -149,6 +149,7 @@ data POp | CVLD -- validate | SDBX -- sandbox | VALU -- value + | VALS -- values | TLTT -- Term.Link.toText -- Debug | PRNT -- print @@ -323,6 +324,7 @@ pOpCode op = case op of NOTB -> 145 ANDB -> 146 IORB -> 147 + VALS -> 148 pOpAssoc :: [(POp, Word16)] pOpAssoc = map (\op -> (op, pOpCode op)) [minBound .. maxBound] diff --git a/unison-runtime/src/Unison/Runtime/Array.hs b/unison-runtime/src/Unison/Runtime/Array.hs index e34ff20efb..394d12b189 100644 --- a/unison-runtime/src/Unison/Runtime/Array.hs +++ b/unison-runtime/src/Unison/Runtime/Array.hs @@ -26,6 +26,14 @@ module Unison.Runtime.Array readPrimArray, writePrimArray, indexPrimArray, + arrayMap, + arrayMapFromSeq, + arrayMapToPrim, + arrayToSeq, + SomePrimArr (..), + primArrayFromSeq, + primArrayMap, + primArrayToSeq, ) where @@ -55,7 +63,8 @@ import Data.Primitive.PrimArray as EPA hiding ) import Data.Primitive.PrimArray qualified as PA import Data.Primitive.Types -import Data.Word (Word8) +import Data.Sequence (Seq, pattern (:<|), pattern Empty, (|>)) +import Data.Word (Word8, Word64) import GHC.IsList (toList) #ifdef ARRAY_CHECK @@ -427,3 +436,89 @@ indexPrimArray = checkIPArray "indexPrimArray" PA.indexPrimArray byteArrayToList :: ByteArray -> [Word8] byteArrayToList = toList + +-- Builds a new array by applying a function to each element of an input +-- array. The type is more like traverse, as it occurs in a `PrimMonad` +-- for array creation, and we can permit the function to have effects in +-- that monad. One thing this means is that you can throw IO exceptions if +-- you want. +arrayMap :: PrimMonad m => (a -> m b) -> PA.Array a -> m (Array b) +arrayMap f ia = do + oa <- PA.newArray sz (error "arrayMap: dummy value") + let go n + | n <= sz = pure () + | otherwise = do + PA.writeArray oa n =<< f (PA.indexArray ia n) + go (n+1) + go 0 + PA.unsafeFreezeArray oa + where + sz = PA.sizeofArray ia +{-# INLINE arrayMap #-} + +arrayMapFromSeq :: PrimMonad m => (a -> m b) -> Seq a -> m (Array b) +arrayMapFromSeq f s = do + dst <- PA.newArray sz (error "arrayMapFromSeq: dummy value") + let go !_ Empty = PA.unsafeFreezeArray dst + go !n (x :<| xs) = do + PA.writeArray dst n =<< f x + go (n+1) xs + go 0 s + where + sz = length s +{-# INLINE arrayMapFromSeq #-} + +arrayToSeq :: Array a -> Seq a +arrayToSeq = fromList . toList + +-- TODO: more cases +newtype SomePrimArr = NArr (PrimArray Word64) + +primArrayFromSeq :: (Prim a, PrimMonad m) => Seq a -> m (PrimArray a) +primArrayFromSeq s = do + dst <- newPrimArray sz + let go !_ Empty = unsafeFreezePrimArray dst + go !n (x :<| xs) = writePrimArray dst n x *> go (n+1) xs + go 0 s + where + sz = length s +{-# INLINE primArrayFromSeq #-} + +primArrayMap :: + (Prim a, Prim b, PrimMonad m) => + (a -> m b) -> PrimArray a -> m (PrimArray b) +primArrayMap f src = do + dst <- newPrimArray sz + let go n + | n >= sz = unsafeFreezePrimArray dst + | otherwise = do + writePrimArray dst n =<< f (indexPrimArray src n) + go (n+1) + go 0 + where + sz = sizeofPrimArray src +{-# INLINE primArrayMap #-} + +primArrayToSeq :: Prim a => PrimArray a -> Seq a +primArrayToSeq src = go mempty 0 + where + sz = sizeofPrimArray src + + go acc n + | n < sz = go (acc |> indexPrimArray src n) (n+1) + | otherwise = acc +{-# INLINE primArrayToSeq #-} + +arrayMapToPrim :: + (Prim b, PrimMonad m) => (a -> m b) -> Array a -> m (PrimArray b) +arrayMapToPrim f src = do + dst <- newPrimArray sz + let go n + | n >= sz = unsafeFreezePrimArray dst + | otherwise = do + writePrimArray dst n =<< f (indexArray src n) + go (n+1) + go 0 + where + sz = sizeofArray src +{-# INLINE arrayMapToPrim #-} diff --git a/unison-runtime/src/Unison/Runtime/Builtin.hs b/unison-runtime/src/Unison/Runtime/Builtin.hs index 863f6fc1e8..567e4bb722 100644 --- a/unison-runtime/src/Unison/Runtime/Builtin.hs +++ b/unison-runtime/src/Unison/Runtime/Builtin.hs @@ -643,6 +643,16 @@ murmur'hash instr = where (x, vl) = fresh +-- custom code for hashing an entire array of values +murmur'hashes :: ForeignOp +murmur'hashes instr = + ([BX],) + . TAbss [x] + . TLetD vls BX (TPrm VALS [x]) + $ TFOp instr [vls] + where + (x, vls) = fresh + crypto'hmac :: ForeignOp crypto'hmac instr = ([BX, BX, BX],) @@ -1227,6 +1237,8 @@ declareForeigns = do declareForeignWrap Untracked murmur'hash Universal_murmurHash declareForeignWrap Untracked murmur'hash Universal_murmurHashUntyped + declareForeignWrap Untracked murmur'hashes + ImmutableArray_murmurHashesUntyped declareForeign Tracked 1 IO_randomBytes declareForeign Untracked 1 Bytes_zlib_compress @@ -1403,6 +1415,33 @@ declareForeigns = do declareForeign Untracked 1 Json_tryUnconsText declareForeign Untracked 3 Avro_decodeBinary + declareForeign Untracked 1 ImmutableArray_at1s + declareForeign Untracked 1 ImmutableArray_at2s + declareForeign Untracked 3 ImmutableArray_chop + declareForeign Untracked 1 ImmutableArray_fromList + declareForeign Untracked 1 ImmutableArray_fromListAt1 + declareForeign Untracked 1 ImmutableArray_fromListAt2 + declareForeign Untracked 2 ImmutableArray_intersectIx + declareForeign Untracked 2 ImmutableArray_outerJoinIx + declareForeign Untracked 2 ImmutableArray_pick + declareForeign Untracked 2 ImmutableArray_pick1 + declareForeign Untracked 3 ImmutableArray_pick1Or + declareForeign Untracked 1 ImmutableArray_runsIx + declareForeign Untracked 1 ImmutableArray_toList + declareForeign Untracked 1 ImmutableArray_toLists + declareForeign Untracked 2 ImmutableArray_zipAppend + declareForeign Untracked 1 ImmutableArray_sortIx + declareForeign Untracked 1 UnboxedArray_fromNatList + declareForeign Untracked 2 UnboxedArray_modR + declareForeign Untracked 2 UnboxedArray_multiplyR + declareForeign Untracked 2 UnboxedArray_divideR + declareForeign Untracked 1 UnboxedArray_size + declareForeign Untracked 1 UnboxedArray_toList + declareForeign Untracked 1 UnboxedArray_occurrences + declareForeign Untracked 2 UnboxedArray_pick + declareForeign Untracked 2 UnboxedArray_pick1 + declareForeign Untracked 3 UnboxedArray_pick1Or + foreignDeclResults :: (Map ForeignFunc (Sandbox, SuperNormal Reference Symbol)) foreignDeclResults = diff --git a/unison-runtime/src/Unison/Runtime/Foreign.hs b/unison-runtime/src/Unison/Runtime/Foreign.hs index 6c195bde16..116c6a9065 100644 --- a/unison-runtime/src/Unison/Runtime/Foreign.hs +++ b/unison-runtime/src/Unison/Runtime/Foreign.hs @@ -355,6 +355,10 @@ instance BuiltinForeign ByteArray where foreignName = Tagged "ByteArray" foreignRef = Tagged Ty.ibytearrayRef +instance BuiltinForeign SomePrimArr where + foreignName = Tagged "UnboxedArray" + foreignRef = Tagged Ty.uarrayRef + instance BuiltinForeign Integer where foreignName = Tagged "Integer" foreignRef = Tagged Ty.integerRef diff --git a/unison-runtime/src/Unison/Runtime/Foreign/Function.hs b/unison-runtime/src/Unison/Runtime/Foreign/Function.hs index 0520098913..abb329f584 100644 --- a/unison-runtime/src/Unison/Runtime/Foreign/Function.hs +++ b/unison-runtime/src/Unison/Runtime/Foreign/Function.hs @@ -33,6 +33,7 @@ import Crypto.MAC.HMAC qualified as HMAC import Crypto.PubKey.Ed25519 qualified as Ed25519 import Crypto.PubKey.RSA.PKCS15 qualified as RSA import Crypto.Random (getRandomBytes) +import Data.Array.Byte qualified as BA import Data.Avro qualified as Avro import Data.Avro.Encoding.FromAvro qualified as FromAvro import Data.Avro.Schema.ReadSchema qualified as ReadSchema @@ -64,6 +65,8 @@ import Data.Time.Clock.POSIX as SYS ) import Data.Time.LocalTime (TimeZone (..), getTimeZone) import Data.Vector qualified as Vector +import Data.Vector.Primitive.Mutable qualified as MPV +import Data.Vector.Algorithms.Merge qualified as MRG import Data.X509 qualified as X import Data.X509.CertificateStore qualified as X import Data.X509.Memory qualified as X @@ -767,6 +770,62 @@ foreignCallHelper = \case src (fromIntegral soff) (fromIntegral l) + ImmutableArray_at1s -> mkForeign $ + PA.arrayMap (extractFst "ImmutableArray.at1s") + ImmutableArray_at2s -> mkForeign $ + PA.arrayMap (extractSnd "ImmutableArray.at2s") + ImmutableArray_fromList -> mkForeign $ \(seq :: Seq Val) -> + pure $ PA.arrayFromListN (length seq) (toList seq) + ImmutableArray_fromListAt1 -> mkForeign $ + PA.arrayMapFromSeq (extractFst "ImmutableArray.fromListAt1") + ImmutableArray_fromListAt2 -> mkForeign $ + PA.arrayMapFromSeq (extractSnd "ImmutableArray.fromListAt2") + ImmutableArray_toList -> mkForeign $ pure . PA.arrayToSeq @Val + ImmutableArray_toLists -> mkForeign $ + PA.arrayMap \case + ArrVal a -> evaluate . SeqVal $ PA.arrayToSeq @Val a + _ -> die [] "ImmutableArray.toLists: unexpected value" + ImmutableArray_pick -> mkForeignExn pick + ImmutableArray_pick1 -> mkForeignExn pick1 + ImmutableArray_pick1Or -> mkForeignExn pick1Or + ImmutableArray_sortIx -> mkForeign sortIx + ImmutableArray_zipAppend -> mkForeign $ + \(l :: PA.Array Val, r :: PA.Array Val) -> do + let sz = min (PA.sizeofArray l) (PA.sizeofArray r) + dst <- PA.newArray sz emptyVal + let fill i + | i < sz = case (PA.indexArray l i, PA.indexArray r i) of + (SeqVal sl, SeqVal sr) -> do + PA.writeArray dst i (SeqVal $ sl <> sr) + fill (i+1) + _ -> die [] "ImmutableArray.zipAppend: non-list elements" + | otherwise = PA.unsafeFreezeArray dst + fill 0 + ImmutableArray_runsIx -> mkForeign collectRuns + ImmutableArray_chop -> mkForeignExn chopArr + ImmutableArray_intersectIx -> mkForeign intersectArrs + ImmutableArray_outerJoinIx -> mkForeign outerJoinArrs + ImmutableArray_murmurHashesUntyped -> mkForeign $ + fmap PA.NArr . PA.arrayMapToPrim \v -> do + v <- decodeVal v + pure . asWord64 $ ANFH.hash64ValueUntyped v + UnboxedArray_fromNatList -> mkForeign $ \(src :: Seq Val) -> do + src <- traverse (extractNat "UnboxedArray.fromNatList") src + PA.NArr <$> PA.primArrayFromSeq src + UnboxedArray_modR -> mkForeign $ \(PA.NArr arr, n) -> + PA.NArr <$> PA.primArrayMap (pure . (`mod` n)) arr + UnboxedArray_multiplyR -> mkForeign $ \(PA.NArr arr, n) -> + PA.NArr <$> PA.primArrayMap (pure . (* n)) arr + UnboxedArray_divideR -> mkForeign $ \(PA.NArr arr, n) -> + PA.NArr <$> PA.primArrayMap (pure . (`div` n)) arr + UnboxedArray_size -> mkForeign $ \(PA.NArr arr) -> + evaluate $ PA.sizeofPrimArray arr + UnboxedArray_toList -> mkForeign $ \(PA.NArr src) -> + pure . fmap NatVal $ PA.primArrayToSeq src + UnboxedArray_occurrences -> mkForeign occurrences + UnboxedArray_pick -> mkForeignExn upick + UnboxedArray_pick1 -> mkForeignExn upick1 + UnboxedArray_pick1Or -> mkForeignExn upick1Or MutableArray_read -> mkForeignExn $ checkedRead "MutableArray.read" @@ -1180,6 +1239,24 @@ foreignCallHelper = \case Left se -> Left (Util.Text.pack (show se)) Right a -> Right a +-- Given a `Val` representing a tuple, yields the first component `Val`. +-- Might fail if the value is actually ill-formed. +extractFst :: String -> Val -> IO Val +extractFst name = \case + BData2 _ (TT.maskTags -> 0) x _ -> pure x + _ -> die [] (name ++ ": unexpected value") + +-- As above, but for the second component of a tuple +extractSnd :: String -> Val -> IO Val +extractSnd name = \case + BData2 _ (TT.maskTags -> 0) _ (BData2 _ (TT.maskTags -> 0) y _) -> + pure y + _ -> die [] (name ++ ": unexpected value") + +extractNat :: String -> Val -> IO Word64 +extractNat _ (NatVal n) = pure n +extractNat name _ = die [] (name ++ ": non-nat value") + {-# INLINE mkHashAlgorithm #-} mkHashAlgorithm :: forall alg. (Hash.HashAlgorithm alg) => Data.Text.Text -> alg -> Args -> Stack -> IO (Bool, Stack) mkHashAlgorithm txt alg = @@ -1682,6 +1759,346 @@ checkedIndex64 byteOrder name (arr, i) = W64# (indexWord8ArrayAsWord64# ba# off#) pure $ Right (fromIntegral (fixEndianness w)) +pick :: + (PA.SomePrimArr, PA.Array Val) -> + IO (Either (F.Failure (PA.Array Val, Val)) (PA.Array Val)) +pick (PA.NArr ixs, src) = do + dst <- PA.newArray szi emptyVal + + let fill j + | j < szi = case PA.indexPrimArray ixs j of + ix0 + | ix <- fromIntegral ix0, + 0 <= ix, ix < szs -> do + PA.writeArray dst j (PA.indexArray src ix) + fill (j+1) + | otherwise -> badIndex ix0 + | otherwise = Right <$> PA.unsafeFreezeArray dst + + fill 0 + where + szi = PA.sizeofPrimArray ixs + szs = PA.sizeofArray src + + badIndex ix = + pure . Left $ F.Failure Ty.arrayFailureRef msg (src, natValue ix) + + msg = "ImmutableArray.pick: index out of bounds" + +upick :: + (PA.SomePrimArr, PA.SomePrimArr) -> + IO (Either (F.Failure (PA.SomePrimArr, Val)) PA.SomePrimArr) +upick (PA.NArr ixs, src0@(PA.NArr src)) = do + dst <- PA.newPrimArray szi + + let fill j + | j < szi = case PA.indexPrimArray ixs j of + ix0 + | ix <- fromIntegral ix0, + 0 <= ix, ix < szs -> do + PA.writePrimArray dst j (PA.indexPrimArray src ix) + fill (j+1) + | otherwise -> badIndex ix0 + | otherwise = Right . PA.NArr <$> PA.unsafeFreezePrimArray dst + + fill 0 + where + szi = PA.sizeofPrimArray ixs + szs = PA.sizeofPrimArray src + + badIndex ix = + pure . Left $ F.Failure Ty.arrayFailureRef msg (src0, natValue ix) + + msg = "UnboxedArray.pick: index out of bounds" + +pick1Or :: + (Val, PA.SomePrimArr, PA.Array Val) -> + IO (Either (F.Failure (PA.Array Val, Val)) (PA.Array Val)) +pick1Or (dflt, PA.NArr ixs, src) = do + dst <- PA.newArray szi dflt + + let fill j + | j < szi = case PA.indexPrimArray ixs j of + ix0 + | ix0 == 0 -> fill (j+1) + | ix <- fromIntegral ix0, + 0 < ix, ix <= szs -> do + PA.writeArray dst j (PA.indexArray src (ix - 1)) + fill (j+1) + | otherwise -> badIndex ix0 + | otherwise = Right <$> PA.unsafeFreezeArray dst + + fill 0 + where + szi = PA.sizeofPrimArray ixs + szs = PA.sizeofArray src + + badIndex ix = + pure . Left $ F.Failure Ty.arrayFailureRef msg (src, natValue ix) + + msg = "ImmutableArray.pick: index out of bounds" + +upick1Or :: + (PA.SomePrimArr, PA.SomePrimArr) -> + IO (Either (F.Failure (PA.SomePrimArr, Val)) PA.SomePrimArr) +upick1Or (PA.NArr ixs, src0@(PA.NArr src)) = do + dst <- PA.newPrimArray szi + + let fill j + | j < szi = case PA.indexPrimArray ixs j of + ix0 + | ix0 == 0 -> fill (j+1) + | ix <- fromIntegral ix0, + 0 < ix, ix <= szs -> do + PA.writePrimArray dst j $ + PA.indexPrimArray src (ix - 1) + fill (j+1) + | otherwise -> badIndex ix0 + | otherwise = Right . PA.NArr <$> PA.unsafeFreezePrimArray dst + + fill 0 + where + szi = PA.sizeofPrimArray ixs + szs = PA.sizeofPrimArray src + + badIndex ix = + pure . Left $ F.Failure Ty.arrayFailureRef msg (src0, natValue ix) + + msg = "UnboxedArray.pick: index out of bounds" + +pick1 :: + (PA.SomePrimArr, PA.Array Val) -> + IO (Either (F.Failure (PA.Array Val, Val)) (PA.Array Val)) +pick1 (PA.NArr ixs, src) = do + dst <- PA.newArray szd emptyVal + + let fill j !k + | j < szi = case PA.indexPrimArray ixs j of + ix0 + | ix0 == 0 -> fill (j+1) k + | ix <- fromIntegral ix0, + 0 < ix, ix <= szs -> do + PA.writeArray dst k (PA.indexArray src (ix - 1)) + fill (j+1) (k+1) + | otherwise -> badIndex ix0 + | otherwise = Right <$> PA.unsafeFreezeArray dst + + fill 0 0 + where + szi = PA.sizeofPrimArray ixs + szs = PA.sizeofArray src + szd = cnz 0 0 + + cnz !acc i + | i < szi = + cnz (acc + signum (PA.indexPrimArray ixs i)) (i+1) + | otherwise = fromIntegral acc + + badIndex ix = + pure . Left $ F.Failure Ty.arrayFailureRef msg (src, natValue ix) + + msg = "ImmutableArray.pick1: index out of bounds" + +upick1 :: + (PA.SomePrimArr, PA.SomePrimArr) -> + IO (Either (F.Failure (PA.SomePrimArr, Val)) PA.SomePrimArr) +upick1 (PA.NArr ixs, src0@(PA.NArr src)) = do + dst <- PA.newPrimArray szd + + let fill j !k + | j < szi = case PA.indexPrimArray ixs j of + ix0 + | ix0 == 0 -> fill (j+1) k + | ix <- fromIntegral ix0, + 0 < ix, ix <= szs -> do + PA.writePrimArray dst k $ + PA.indexPrimArray src (ix - 1) + fill (j+1) (k+1) + | otherwise -> badIndex ix0 + | otherwise = Right . PA.NArr <$> PA.unsafeFreezePrimArray dst + + fill 0 0 + where + szi = PA.sizeofPrimArray ixs + szs = PA.sizeofPrimArray src + szd = cnz 0 0 + + cnz !acc i + | i < szi = + cnz (acc + signum (PA.indexPrimArray ixs i)) (i+1) + | otherwise = fromIntegral acc + + badIndex ix = + pure . Left $ F.Failure Ty.arrayFailureRef msg (src0, natValue ix) + + msg = "UnboxedArray.pick1: index out of bounds" + +collectRuns :: PA.Array Val -> IO (PA.SomePrimArr, PA.SomePrimArr) +collectRuns src + | sz == 0 = pure (emptyNArr, emptyNArr) + | v <- PA.indexArray src 0 = collect [0] [] v 1 1 + where + sz = PA.sizeofArray src + + emptyNArr = PA.NArr PA.emptyPrimArray + + mkArr l = evaluate . PA.NArr $ PA.primArrayFromList l + + collect ixs lens v !n i + | i >= sz = + (,) <$> (mkArr $ reverse ixs) <*> (mkArr . reverse $ n:lens) + | u <- PA.indexArray src i = + if v == u + then collect ixs lens v (n+1) (i+1) + else collect (fromIntegral i:ixs) (n:lens) u 1 (i+1) + +chopArr :: + (PA.SomePrimArr, PA.SomePrimArr, PA.Array Val) -> + IO (Either (F.Failure Val) (PA.Array Val)) +chopArr (PA.NArr ixs, PA.NArr lens, src) + | isz /= PA.sizeofPrimArray lens = + pure . Left $ + F.Failure + Ty.arrayFailureRef + "ImmutableArray.chop: mismatched index array lengths" + unitVal + | otherwise = validate 0 + where + isz = PA.sizeofPrimArray ixs + ssz = PA.sizeofArray src + + slice i n arr + | i >= n = PA.unsafeFreezeArray arr + | otherwise = do + PA.writeArray arr i (PA.indexArray src i) + slice (i+1) n arr + + slices i arr + | i >= isz = Right <$> PA.unsafeFreezeArray arr + | ix <- fromIntegral $ PA.indexPrimArray ixs i, + ln <- fromIntegral $ PA.indexPrimArray lens i = do + PA.writeArray arr i . encodeVal @(PA.Array Val) + =<< slice ix (ix+ln) + =<< PA.newArray ln emptyVal + slices (i+1) arr + + validate i + | i >= isz = PA.newArray isz emptyVal >>= slices 0 + | ix <- PA.indexPrimArray ixs i, + ln <- PA.indexPrimArray lens i, + ix + ln >= fromIntegral ssz = + pure . Left $ + F.Failure + Ty.arrayFailureRef + "chop: indices out of bounds" + (encodeVal (ix, ln)) + | otherwise = validate (i+1) + +occurrences :: PA.SomePrimArr -> IO (PA.Array Val) +occurrences (PA.NArr src) + | sz == 0 = pure PA.emptyArray + | ixs <- collect Map.empty 0 = case Map.lookupMax ixs of + Nothing -> pure PA.emptyArray + Just (mx, _) -> do + dst <- PA.newArray (fromIntegral $ mx+1) emptyNArr + let fill i + | i > mx = pure () + | Just is <- Map.lookup i ixs = do + PA.writeArray dst (fromIntegral i) + (encodeVal . PA.NArr . PA.primArrayFromList $ reverse is) + fill (i+1) + | otherwise = fill (i+1) + fill 0 + PA.unsafeFreezeArray dst + where + sz = PA.sizeofPrimArray src + + emptyNArr = encodeVal $ PA.NArr PA.emptyPrimArray + + collect :: Map Word64 [Word64] -> Int -> Map Word64 [Word64] + collect !acc i + | i < sz, + j <- PA.indexPrimArray src i = + collect (Map.insertWith (++) j [fromIntegral i] acc) (i+1) + | otherwise = acc + +intersectArrs :: + (PA.Array Val, PA.Array Val) -> IO (PA.SomePrimArr, PA.SomePrimArr) +intersectArrs (srcl, srcr) = do + ixsl <- sortIx0 srcl + ixsr <- sortIx0 srcr + let align ls rs i j + | i >= szl || j >= szr = (ls, rs) + | il <- PA.indexPrimArray ixsl i, + ir <- PA.indexPrimArray ixsr j, + u <- PA.indexArray srcl (fromIntegral il), + v <- PA.indexArray srcr (fromIntegral ir) = + if u < v + then align ls rs (i+1) j + else if u > v + then align ls rs i (j+1) + else align (il:ls) (ir:rs) (i+1) (j+1) + case align [] [] 0 0 of + (ils, irs) -> (,) <$> mkArr ils <*> mkArr irs + where + szl = PA.sizeofArray srcl + szr = PA.sizeofArray srcr + + mkArr = evaluate . PA.NArr . PA.primArrayFromList . reverse + +-- TODO: what should happen for duplicate values? +outerJoinArrs :: + (PA.Array Val, PA.Array Val) -> IO (PA.SomePrimArr, PA.SomePrimArr) +outerJoinArrs (srcl, srcr) = do + ixsl <- sortIx0 srcl + ixsr <- sortIx0 srcr + let align ls rs i j + | i >= szl || j >= szr = (ls, rs) + | il <- PA.indexPrimArray ixsl i, + ir <- PA.indexPrimArray ixsr j, + u <- PA.indexArray srcl (fromIntegral il), + v <- PA.indexArray srcr (fromIntegral ir) = + if u < v + then align (0:ls) rs (i+1) j + else if u > v + then align ls (0:rs) i (j+1) + else align (1+il:ls) (1+ir:rs) (i+1) (j+1) + case align [] [] 0 0 of + (ils, irs) -> (,) <$> mkArr ils <*> mkArr irs + where + szl = PA.sizeofArray srcl + szr = PA.sizeofArray srcr + + mkArr = evaluate . PA.NArr . PA.primArrayFromList . reverse + +sortIx0 :: PA.Array Val -> IO (PA.PrimArray Word64) +sortIx0 src = do + ixs <- PA.newPrimArray sz + + let fill n + | n < sz = + PA.writePrimArray ixs n (fromIntegral n) *> fill (n+1) + | otherwise = pure () + fill 0 + + MRG.sortBy cmp (unsafePrimVectorFromPrimArray sz ixs) + + PA.unsafeFreezePrimArray ixs + where + sz = PA.sizeofArray src + + srcIx i = PA.indexArray src (fromIntegral i) + + cmp i j = compare (srcIx i) (srcIx j) + +sortIx :: PA.Array Val -> IO PA.SomePrimArr +sortIx src = PA.NArr <$> sortIx0 src + +unsafePrimVectorFromPrimArray :: + Int -> PA.MutablePrimArray s t -> MPV.MVector s t +unsafePrimVectorFromPrimArray sz (PA.MutablePrimArray bv) = + MPV.MVector 0 sz (BA.MutableByteArray bv) + -- JSON replacement implementations jsonNull, jsonTrue, jsonFalse :: Val jsonNull = BoxedVal $ Enum Ty.jsonRef TT.jsonNullTag diff --git a/unison-runtime/src/Unison/Runtime/Foreign/Function/Type.hs b/unison-runtime/src/Unison/Runtime/Foreign/Function/Type.hs index 11abc4eec3..c2a592247d 100644 --- a/unison-runtime/src/Unison/Runtime/Foreign/Function/Type.hs +++ b/unison-runtime/src/Unison/Runtime/Foreign/Function/Type.hs @@ -364,6 +364,33 @@ data ForeignFunc | Natural_isEven | Natural_isOdd | Universal_murmurHashUntyped + | ImmutableArray_at1s + | ImmutableArray_at2s + | ImmutableArray_chop + | ImmutableArray_fromList + | ImmutableArray_fromListAt1 + | ImmutableArray_fromListAt2 + | ImmutableArray_intersectIx + | ImmutableArray_murmurHashesUntyped + | ImmutableArray_outerJoinIx + | ImmutableArray_pick + | ImmutableArray_pick1 + | ImmutableArray_pick1Or + | ImmutableArray_runsIx + | ImmutableArray_toList + | ImmutableArray_toLists + | ImmutableArray_zipAppend + | ImmutableArray_sortIx + | UnboxedArray_fromNatList + | UnboxedArray_modR + | UnboxedArray_multiplyR + | UnboxedArray_divideR + | UnboxedArray_size + | UnboxedArray_toList + | UnboxedArray_occurrences + | UnboxedArray_pick + | UnboxedArray_pick1 + | UnboxedArray_pick1Or deriving (Show, Eq, Ord, Enum, Bounded) foreignFuncBuiltinName :: ForeignFunc -> Text @@ -724,3 +751,31 @@ foreignFuncBuiltinName = \case Natural_isEven -> "Natural.isEven" Natural_isOdd -> "Natural.isOdd" Universal_murmurHashUntyped -> "Universal.murmurHashUntyped" + ImmutableArray_at1s -> "ImmutableArray.at1s" + ImmutableArray_at2s -> "ImmutableArray.at2s" + ImmutableArray_fromList -> "ImmutableArray.fromList" + ImmutableArray_fromListAt1 -> "ImmutableArray.fromListAt1" + ImmutableArray_fromListAt2 -> "ImmutableArray.fromListAt2" + ImmutableArray_murmurHashesUntyped -> + "ImmutableArray.murmurHashesUntyped" + ImmutableArray_pick -> "ImmutableArray.pick" + ImmutableArray_pick1 -> "ImmutableArray.pick1" + ImmutableArray_pick1Or -> "ImmutableArray.pick1Or" + ImmutableArray_zipAppend -> "ImmutableArray.zipAppend" + ImmutableArray_runsIx -> "ImmutableArray.runsIx" + ImmutableArray_toList -> "ImmutableArray.toList" + ImmutableArray_toLists -> "ImmutableArray.toLists" + ImmutableArray_sortIx -> "ImmutableArray.sortIx" + ImmutableArray_chop -> "ImmutableArray.chop" + ImmutableArray_outerJoinIx -> "ImmutableArray.outerJoinIx" + ImmutableArray_intersectIx -> "ImmutableArray.intersectIx" + UnboxedArray_fromNatList -> "UnboxedArray.fromNatList" + UnboxedArray_modR -> "UnboxedArray.modR" + UnboxedArray_multiplyR -> "UnboxedArray.multiplyR" + UnboxedArray_divideR -> "UnboxedArray.divideR" + UnboxedArray_size -> "UnboxedArray.size" + UnboxedArray_toList -> "UnboxedArray.toList" + UnboxedArray_occurrences -> "UnboxedArray.occurrences" + UnboxedArray_pick -> "UnboxedArray.pick" + UnboxedArray_pick1 -> "UnboxedArray.pick1" + UnboxedArray_pick1Or -> "UnboxedArray.pick1Or" diff --git a/unison-runtime/src/Unison/Runtime/MCode.hs b/unison-runtime/src/Unison/Runtime/MCode.hs index 24a4a93ed5..1933c40624 100644 --- a/unison-runtime/src/Unison/Runtime/MCode.hs +++ b/unison-runtime/src/Unison/Runtime/MCode.hs @@ -372,6 +372,7 @@ data Prim1 | REFR -- Ref.read | RRFC | TIKR + | VALS -- reflect array elements to values deriving (Show, Eq, Ord, Enum, Bounded) data Prim2 @@ -1402,6 +1403,7 @@ emitPOp ANF.TLTT = emitP1 TLTT emitPOp ANF.CVLD = emitP1 CVLD emitPOp ANF.LOAD = emitP1 LOAD emitPOp ANF.VALU = emitP1 VALU +emitPOp ANF.VALS = emitP1 VALS emitPOp ANF.SDBX = emitP2 SDBX emitPOp ANF.SDBL = emitP1 SDBL emitPOp ANF.SDBV = emitP2 SDBV diff --git a/unison-runtime/src/Unison/Runtime/Machine.hs b/unison-runtime/src/Unison/Runtime/Machine.hs index 03e7a2b34d..a9ab5fc4e0 100644 --- a/unison-runtime/src/Unison/Runtime/Machine.hs +++ b/unison-runtime/src/Unison/Runtime/Machine.hs @@ -366,6 +366,11 @@ exec env henv !_activeThreads !stk !k _ (Prim1 VALU i) = do stk <- bump stk pokeBi stk =<< reflectValue env c pure (False, henv, stk, k) +exec env henv !_activeThreads !stk !k _ (Prim1 VALS i) = do + cs <- peekOffBi stk i + stk <- bump stk + pokeBi stk =<< reflectValues env cs + pure (False, henv, stk, k) exec env henv !_activeThreads !stk !k _ (Prim1 op i) = do stk <- prim1 env stk op i pure (False, henv, stk, k) @@ -1549,6 +1554,10 @@ canonicalizeReferenced :: canonicalizeReferenced x = mediate $ recanonicalizeRefs x {-# INLINE canonicalizeReferenced #-} +reflectValues :: CCache p -> PA.Array Val -> IO (PA.Array Val) +reflectValues env arr = + PA.arrayMap (fmap encodeVal . reflectValue env) arr + reflectValue :: CCache p -> Val -> IO (Referenced ANF.Value) reflectValue env val = do tyr <- readTVarIO (tagRefs env) diff --git a/unison-runtime/src/Unison/Runtime/Serialize.hs b/unison-runtime/src/Unison/Runtime/Serialize.hs index ac4d37d445..3d258ef2a7 100644 --- a/unison-runtime/src/Unison/Runtime/Serialize.hs +++ b/unison-runtime/src/Unison/Runtime/Serialize.hs @@ -511,6 +511,7 @@ instance Tag Prim1 where tag2word REFR = 63 tag2word RRFC = 64 tag2word TIKR = 65 + tag2word VALS = 66 word2tag 0 = pure DECI word2tag 1 = pure DECN @@ -579,6 +580,7 @@ instance Tag Prim1 where word2tag 63 = pure REFR word2tag 64 = pure RRFC word2tag 65 = pure TIKR + word2tag 66 = pure VALS word2tag n = unknownTag "Prim1" n instance Tag Prim2 where diff --git a/unison-runtime/src/Unison/Runtime/Stack.hs b/unison-runtime/src/Unison/Runtime/Stack.hs index 6c51e620fd..f40f441fc6 100644 --- a/unison-runtime/src/Unison/Runtime/Stack.hs +++ b/unison-runtime/src/Unison/Runtime/Stack.hs @@ -67,8 +67,12 @@ module Unison.Runtime.Stack DoubleVal, IntVal, BoolVal, + SeqVal, + ArrVal, UnboxedVal, - BoxedVal + BoxedVal, + BData1, + BData2 ), emptyVal, falseVal, @@ -426,8 +430,10 @@ pattern Enum :: Reference -> PackedTag -> Closure pattern Enum r t = Closure (GEnum r t) pattern Data1 r t i = Closure (GData1 r t i) +pattern BData1 r t i = BoxedVal (Data1 r t i) pattern Data2 r t i j = Closure (GData2 r t i j) +pattern BData2 r t i j = BoxedVal (Data2 r t i j) pattern DataG r t seg = Closure (GDataG r t seg) @@ -618,6 +624,18 @@ trueVal :: Val trueVal = BoxedVal (Enum Ty.booleanRef TT.trueTag) {-# NOINLINE trueVal #-} +pattern SeqVal :: Seq Val -> Val +pattern SeqVal s <- + BoxedVal (Foreign (maybeUnwrapBuiltin @(Seq Val) -> Just s)) + where + SeqVal s = BoxedVal (Foreign (wrapBuiltin s)) + +pattern ArrVal :: PA.Array Val -> Val +pattern ArrVal a <- + BoxedVal (Foreign (maybeUnwrapBuiltin @(PA.Array Val) -> Just a)) + where + ArrVal a = BoxedVal (Foreign (wrapBuiltin a)) + doubleToInt :: Double -> Int doubleToInt d = indexByteArray (BA.byteArrayFromList [d]) 0 {-# INLINE doubleToInt #-} @@ -875,6 +893,10 @@ instance Eq Val where instance Ord Val where compare = universalCompare compare +instance BuiltinForeign (Seq Val) where + foreignName = Tagged "Seq" + foreignRef = Tagged Ty.listRef + instance BuiltinForeign (Map Val Val) where foreignName = Tagged "Map" foreignRef = Tagged Ty.hmapRef diff --git a/unison-runtime/unison-runtime.cabal b/unison-runtime/unison-runtime.cabal index 7d4e760630..b0ffbc592a 100644 --- a/unison-runtime/unison-runtime.cabal +++ b/unison-runtime/unison-runtime.cabal @@ -169,6 +169,7 @@ library , unliftio , unordered-containers , vector + , vector-algorithms default-language: Haskell2010 if flag(arraychecks) cpp-options: -DARRAY_CHECK From f093b9d7309894776884cd039ade7653a76f9cc5 Mon Sep 17 00:00:00 2001 From: Dan Doel Date: Mon, 29 Sep 2025 12:07:39 -0400 Subject: [PATCH 2/9] Fix non-exhaustive cases in primops --- unison-runtime/src/Unison/Runtime/Machine/Primops.hs | 1 + 1 file changed, 1 insertion(+) diff --git a/unison-runtime/src/Unison/Runtime/Machine/Primops.hs b/unison-runtime/src/Unison/Runtime/Machine/Primops.hs index 28c6b9386e..ff7d25f22f 100644 --- a/unison-runtime/src/Unison/Runtime/Machine/Primops.hs +++ b/unison-runtime/src/Unison/Runtime/Machine/Primops.hs @@ -109,6 +109,7 @@ prim1 env !stk DBTX i = prim1wrap (dbtx env) stk i prim1 _env !stk CACH _ = pure stk prim1 _env !stk LOAD _ = pure stk prim1 _env !stk VALU _ = pure stk +prim1 _env !stk VALS _ = pure stk {-# INLINE prim1 #-} -- Wrap an implementation to act on an index on two indices From 7c15464b9f9f67c9d05b6279e6955767f54afef8 Mon Sep 17 00:00:00 2001 From: Dan Doel Date: Mon, 29 Sep 2025 12:07:53 -0400 Subject: [PATCH 3/9] Adjust logic of outer join The mismatching cases were doing sort of the opposite of intended --- unison-runtime/src/Unison/Runtime/Foreign/Function.hs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/unison-runtime/src/Unison/Runtime/Foreign/Function.hs b/unison-runtime/src/Unison/Runtime/Foreign/Function.hs index abb329f584..650226a2c8 100644 --- a/unison-runtime/src/Unison/Runtime/Foreign/Function.hs +++ b/unison-runtime/src/Unison/Runtime/Foreign/Function.hs @@ -2059,9 +2059,9 @@ outerJoinArrs (srcl, srcr) = do u <- PA.indexArray srcl (fromIntegral il), v <- PA.indexArray srcr (fromIntegral ir) = if u < v - then align (0:ls) rs (i+1) j + then align (1+il:ls) (0:rs) (i+1) j else if u > v - then align ls (0:rs) i (j+1) + then align (0:ls) (1+ir:rs) i (j+1) else align (1+il:ls) (1+ir:rs) (i+1) (j+1) case align [] [] 0 0 of (ils, irs) -> (,) <$> mkArr ils <*> mkArr irs From 7a2516739157a3e1bc246b6603fb34f50bee8364 Mon Sep 17 00:00:00 2001 From: Dan Doel Date: Mon, 29 Sep 2025 12:28:23 -0400 Subject: [PATCH 4/9] Fix kind checking of UnboxedArray --- parser-typechecker/src/Unison/KindInference/Generate.hs | 1 + 1 file changed, 1 insertion(+) diff --git a/parser-typechecker/src/Unison/KindInference/Generate.hs b/parser-typechecker/src/Unison/KindInference/Generate.hs index 912c20ab0f..1e6190f709 100644 --- a/parser-typechecker/src/Unison/KindInference/Generate.hs +++ b/parser-typechecker/src/Unison/KindInference/Generate.hs @@ -377,6 +377,7 @@ builtinConstraintTree = (constrain (Type :-> Type)) [ Type.list, Type.iarrayType, + Type.uarrayType, flip Type.ref Type.mvarRef, flip Type.ref Type.tvarRef, flip Type.ref Type.ticketRef, From 11e2a2041887c1fe8f0f5daf0c42681367fd48dc Mon Sep 17 00:00:00 2001 From: Dan Doel Date: Mon, 29 Sep 2025 14:14:47 -0400 Subject: [PATCH 5/9] Implement decompilation for UnboxedArray --- unison-runtime/src/Unison/Runtime/Decompile.hs | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/unison-runtime/src/Unison/Runtime/Decompile.hs b/unison-runtime/src/Unison/Runtime/Decompile.hs index 7ce171eb68..3c15c75995 100644 --- a/unison-runtime/src/Unison/Runtime/Decompile.hs +++ b/unison-runtime/src/Unison/Runtime/Decompile.hs @@ -27,6 +27,8 @@ import Unison.Runtime.Array ( Array, ByteArray, byteArrayToList, + SomePrimArr (..), + primArrayToList, ) import Unison.Runtime.Foreign ( Foreign (..), @@ -185,6 +187,7 @@ decompileForeign backref topTerms f () (ref () ibarrayFromBytesRef) (decompileBytes . By.fromWord8s $ byteArrayToList a) + | Just a <- maybeUnwrapBuiltin f = pure $ decompilePrimArr a | Just s <- unwrapSeq f = list' () <$> traverse (decompile backref topTerms) s | Just m <- maybeUnwrapForeign hmapRef f = do @@ -238,5 +241,13 @@ decompileBytes = decompileHashAlgorithm :: (Var v) => HashAlgorithm -> Term v () decompileHashAlgorithm (HashAlgorithm r _) = ref () r +decompilePrimArr :: (Var v) => SomePrimArr -> Term v () +decompilePrimArr (NArr ns) = + app () (builtin () $ fromString "UnboxedArray.fromNatList") + . list () + . fmap (nat () . fromIntegral) + . primArrayToList + $ ns + unwrapSeq :: Foreign -> Maybe USeq unwrapSeq = maybeUnwrapForeign listRef From a7c4da608187d8b41d84d61e18d9672d7fed582e Mon Sep 17 00:00:00 2001 From: Dan Doel Date: Mon, 29 Sep 2025 14:15:37 -0400 Subject: [PATCH 6/9] Avoid truncating arrays in outerJoinIx Previously it would stop joining when _either_ side was out of indices, but the opposite side might have some left overs that should extend the results. --- .../src/Unison/Runtime/Foreign/Function.hs | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/unison-runtime/src/Unison/Runtime/Foreign/Function.hs b/unison-runtime/src/Unison/Runtime/Foreign/Function.hs index 650226a2c8..50c0ccee3c 100644 --- a/unison-runtime/src/Unison/Runtime/Foreign/Function.hs +++ b/unison-runtime/src/Unison/Runtime/Foreign/Function.hs @@ -2053,7 +2053,8 @@ outerJoinArrs (srcl, srcr) = do ixsl <- sortIx0 srcl ixsr <- sortIx0 srcr let align ls rs i j - | i >= szl || j >= szr = (ls, rs) + | i >= szl = extendr ls rs j + | j >= szr = extendl ls rs i | il <- PA.indexPrimArray ixsl i, ir <- PA.indexPrimArray ixsr j, u <- PA.indexArray srcl (fromIntegral il), @@ -2063,6 +2064,16 @@ outerJoinArrs (srcl, srcr) = do else if u > v then align (0:ls) (1+ir:rs) i (j+1) else align (1+il:ls) (1+ir:rs) (i+1) (j+1) + + extendr ls rs j + | j < szr, ir <- PA.indexPrimArray ixsr j + = extendr (0:ls) (1+ir:rs) (j+1) + | otherwise = (ls, rs) + extendl ls rs i + | i < szl, il <- PA.indexPrimArray ixsl i + = extendl (1+il:ls) (0:rs) (i+1) + | otherwise = (ls, rs) + case align [] [] 0 0 of (ils, irs) -> (,) <$> mkArr ils <*> mkArr irs where From 9f0120c45e671d9c956b54f61dd6c63b841a85bd Mon Sep 17 00:00:00 2001 From: Dan Doel Date: Tue, 30 Sep 2025 15:11:43 -0400 Subject: [PATCH 7/9] Turn ImmutableArray.fromList into a replacement --- parser-typechecker/src/Unison/Builtin.hs | 2 -- unison-runtime/src/Unison/Runtime/Foreign/Function.hs | 4 ++++ 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/parser-typechecker/src/Unison/Builtin.hs b/parser-typechecker/src/Unison/Builtin.hs index 06a93da842..5fe0f782f5 100644 --- a/parser-typechecker/src/Unison/Builtin.hs +++ b/parser-typechecker/src/Unison/Builtin.hs @@ -816,8 +816,6 @@ builtinsSrc = B "ImmutableArray.fromListAt2" $ forall3 "a" "b" "c" $ \a b c -> list (pair a (pair b c)) --> iarrayt b, - B "ImmutableArray.fromList" $ - forall1 "a" $ \a -> list a --> iarrayt a, B "ImmutableArray.intersectIx" $ forall1 "a" $ \a -> list a --> list a --> tuple [uarrayt nat, uarrayt nat], diff --git a/unison-runtime/src/Unison/Runtime/Foreign/Function.hs b/unison-runtime/src/Unison/Runtime/Foreign/Function.hs index 50c0ccee3c..95db25fb35 100644 --- a/unison-runtime/src/Unison/Runtime/Foreign/Function.hs +++ b/unison-runtime/src/Unison/Runtime/Foreign/Function.hs @@ -3560,6 +3560,10 @@ functionReplacementList = ( "01csmdujt5ot550j9t0o1gfop4ephtssv358rkfqdo2e01knekgds", 0, Avro_decodeBinary + ), + ( "034ipv7raca929hir3gd1e2tmhe6o583rnhfd2ti5u71lj92v2jcg", + 0, + ImmutableArray_fromList ) ] From 8573e77240525f5f54804efa956cc07f57efa740 Mon Sep 17 00:00:00 2001 From: Dan Doel Date: Tue, 30 Sep 2025 15:13:08 -0400 Subject: [PATCH 8/9] Transcript updates --- .../all-base-hashes.output.md | 1529 +++++++++-------- .../transcripts/idempotent/alias-term.md | 6 +- .../transcripts/idempotent/alias-type.md | 6 +- .../transcripts/idempotent/branch-squash.md | 12 +- .../transcripts/idempotent/builtins-merge.md | 28 +- .../transcripts/idempotent/emptyCodebase.md | 6 +- unison-src/transcripts/idempotent/fix1532.md | 2 +- .../idempotent/lib-install-local.md | 6 +- unison-src/transcripts/idempotent/mcp.md | 2 +- unison-src/transcripts/idempotent/move-all.md | 6 +- unison-src/transcripts/idempotent/reflog.md | 30 +- unison-src/transcripts/idempotent/reset.md | 24 +- unison-src/transcripts/idempotent/undo.md | 32 +- unison-src/transcripts/idempotent/upgrade.md | 12 +- 14 files changed, 914 insertions(+), 787 deletions(-) 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 985e7c8650..72fb4e526c 100644 --- a/unison-src/transcripts-using-base/all-base-hashes.output.md +++ b/unison-src/transcripts-using-base/all-base-hashes.output.md @@ -1396,7 +1396,22 @@ This transcript is intended to make visible accidental changes to the hashing al 388. -- ##ImmutableArray builtin type builtin.ImmutableArray - 389. -- ##ImmutableArray.copyTo! + 389. -- ##ImmutableArray.at1s + builtin.ImmutableArray.at1s : ImmutableArray (Tuple a b) + -> ImmutableArray a + + 390. -- ##ImmutableArray.at2s + builtin.ImmutableArray.at2s : ImmutableArray + (Tuple a (Tuple b c)) + -> ImmutableArray b + + 391. -- ##ImmutableArray.chop + builtin.ImmutableArray.chop : UnboxedArray Nat + -> UnboxedArray Nat + -> ImmutableArray a + ->{Exception} ImmutableArray (ImmutableArray a) + + 392. -- ##ImmutableArray.copyTo! builtin.ImmutableArray.copyTo! : MutableArray g a -> Nat -> ImmutableArray a @@ -1404,22 +1419,84 @@ This transcript is intended to make visible accidental changes to the hashing al -> Nat ->{g, Exception} () - 390. -- #j76q8bad5uoq65d0416qq5acd70c4p797grmp24e6cstl7lo3beqprtt30254d5o1tg8afc659bjvh6ufg7ha4ljvhl32g2pcqkhum8 + 393. -- #j76q8bad5uoq65d0416qq5acd70c4p797grmp24e6cstl7lo3beqprtt30254d5o1tg8afc659bjvh6ufg7ha4ljvhl32g2pcqkhum8 builtin.ImmutableArray.fromList : [a] -> ImmutableArray a - 391. -- ##ImmutableArray.read + 394. -- ##ImmutableArray.fromListAt1 + builtin.ImmutableArray.fromListAt1 : [Tuple a b] + -> ImmutableArray a + + 395. -- ##ImmutableArray.fromListAt2 + builtin.ImmutableArray.fromListAt2 : [Tuple + a (Tuple b c)] + -> ImmutableArray b + + 396. -- ##ImmutableArray.intersectIx + builtin.ImmutableArray.intersectIx : [a] + -> [a] + -> (UnboxedArray Nat, UnboxedArray Nat) + + 397. -- ##ImmutableArray.murmurHashesUntyped + builtin.ImmutableArray.murmurHashesUntyped : ImmutableArray + a + -> UnboxedArray Nat + + 398. -- ##ImmutableArray.outerJoinIx + builtin.ImmutableArray.outerJoinIx : ImmutableArray a + -> ImmutableArray a + -> (UnboxedArray Nat, UnboxedArray Nat) + + 399. -- ##ImmutableArray.pick + builtin.ImmutableArray.pick : UnboxedArray Nat + -> ImmutableArray a + ->{Exception} ImmutableArray a + + 400. -- ##ImmutableArray.pick1 + builtin.ImmutableArray.pick1 : UnboxedArray Nat + -> ImmutableArray a + ->{Exception} ImmutableArray a + + 401. -- ##ImmutableArray.pick1Or + builtin.ImmutableArray.pick1Or : a + -> UnboxedArray Nat + -> ImmutableArray a + ->{Exception} ImmutableArray a + + 402. -- ##ImmutableArray.read builtin.ImmutableArray.read : ImmutableArray a -> Nat ->{Exception} a - 392. -- ##ImmutableArray.size + 403. -- ##ImmutableArray.runsIx + builtin.ImmutableArray.runsIx : ImmutableArray a + -> (UnboxedArray Nat, UnboxedArray Nat) + + 404. -- ##ImmutableArray.size builtin.ImmutableArray.size : ImmutableArray a -> Nat - 393. -- ##ImmutableByteArray + 405. -- ##ImmutableArray.sortIx + builtin.ImmutableArray.sortIx : ImmutableArray a + -> UnboxedArray Nat + + 406. -- ##ImmutableArray.toList + builtin.ImmutableArray.toList : ImmutableArray a -> [a] + + 407. -- ##ImmutableArray.toLists + builtin.ImmutableArray.toLists : ImmutableArray + (ImmutableArray a) + -> ImmutableArray [a] + + 408. -- ##ImmutableArray.zipWithAppend + builtin.ImmutableArray.zipWithAppend : ImmutableArray + [a] + -> ImmutableArray [a] + -> ImmutableArray [a] + + 409. -- ##ImmutableByteArray builtin type builtin.ImmutableByteArray - 394. -- ##ImmutableByteArray.copyTo! + 410. -- ##ImmutableByteArray.copyTo! builtin.ImmutableByteArray.copyTo! : MutableByteArray g -> Nat -> ImmutableByteArray @@ -1427,1144 +1504,1144 @@ This transcript is intended to make visible accidental changes to the hashing al -> Nat ->{g, Exception} () - 395. -- ##ImmutableByteArray.fromBytes + 411. -- ##ImmutableByteArray.fromBytes builtin.ImmutableByteArray.fromBytes : Bytes -> ImmutableByteArray - 396. -- ##ImmutableByteArray.read16be + 412. -- ##ImmutableByteArray.read16be builtin.ImmutableByteArray.read16be : ImmutableByteArray -> Nat ->{Exception} Nat - 397. -- ##ImmutableByteArray.read16le + 413. -- ##ImmutableByteArray.read16le builtin.ImmutableByteArray.read16le : ImmutableByteArray -> Nat ->{Exception} Nat - 398. -- ##ImmutableByteArray.read24be + 414. -- ##ImmutableByteArray.read24be builtin.ImmutableByteArray.read24be : ImmutableByteArray -> Nat ->{Exception} Nat - 399. -- ##ImmutableByteArray.read24le + 415. -- ##ImmutableByteArray.read24le builtin.ImmutableByteArray.read24le : ImmutableByteArray -> Nat ->{Exception} Nat - 400. -- ##ImmutableByteArray.read32be + 416. -- ##ImmutableByteArray.read32be builtin.ImmutableByteArray.read32be : ImmutableByteArray -> Nat ->{Exception} Nat - 401. -- ##ImmutableByteArray.read32le + 417. -- ##ImmutableByteArray.read32le builtin.ImmutableByteArray.read32le : ImmutableByteArray -> Nat ->{Exception} Nat - 402. -- ##ImmutableByteArray.read40be + 418. -- ##ImmutableByteArray.read40be builtin.ImmutableByteArray.read40be : ImmutableByteArray -> Nat ->{Exception} Nat - 403. -- ##ImmutableByteArray.read40le + 419. -- ##ImmutableByteArray.read40le builtin.ImmutableByteArray.read40le : ImmutableByteArray -> Nat ->{Exception} Nat - 404. -- ##ImmutableByteArray.read64be + 420. -- ##ImmutableByteArray.read64be builtin.ImmutableByteArray.read64be : ImmutableByteArray -> Nat ->{Exception} Nat - 405. -- ##ImmutableByteArray.read64le + 421. -- ##ImmutableByteArray.read64le builtin.ImmutableByteArray.read64le : ImmutableByteArray -> Nat ->{Exception} Nat - 406. -- ##ImmutableByteArray.read8 + 422. -- ##ImmutableByteArray.read8 builtin.ImmutableByteArray.read8 : ImmutableByteArray -> Nat ->{Exception} Nat - 407. -- ##ImmutableByteArray.size + 423. -- ##ImmutableByteArray.size builtin.ImmutableByteArray.size : ImmutableByteArray -> Nat - 408. -- ##ImmutableByteArray.toBytes + 424. -- ##ImmutableByteArray.toBytes builtin.ImmutableByteArray.toBytes : ImmutableByteArray -> Nat -> Nat -> Bytes - 409. -- ##Int + 425. -- ##Int builtin type builtin.Int - 410. -- ##Int.* + 426. -- ##Int.* builtin.Int.* : Int -> Int -> Int - 411. -- ##Int.+ + 427. -- ##Int.+ builtin.Int.+ : Int -> Int -> Int - 412. -- ##Int.- + 428. -- ##Int.- builtin.Int.- : Int -> Int -> Int - 413. -- ##Int./ + 429. -- ##Int./ builtin.Int./ : Int -> Int -> Int - 414. -- ##Int.and + 430. -- ##Int.and builtin.Int.and : Int -> Int -> Int - 415. -- ##Int.complement + 431. -- ##Int.complement builtin.Int.complement : Int -> Int - 416. -- ##Int.== + 432. -- ##Int.== builtin.Int.eq : Int -> Int -> Boolean - 417. -- ##Int.fromRepresentation + 433. -- ##Int.fromRepresentation builtin.Int.fromRepresentation : Nat -> Int - 418. -- ##Int.fromText + 434. -- ##Int.fromText builtin.Int.fromText : Text -> Optional Int - 419. -- ##Int.> + 435. -- ##Int.> builtin.Int.gt : Int -> Int -> Boolean - 420. -- ##Int.>= + 436. -- ##Int.>= builtin.Int.gteq : Int -> Int -> Boolean - 421. -- ##Int.increment + 437. -- ##Int.increment builtin.Int.increment : Int -> Int - 422. -- ##Int.isEven + 438. -- ##Int.isEven builtin.Int.isEven : Int -> Boolean - 423. -- ##Int.isOdd + 439. -- ##Int.isOdd builtin.Int.isOdd : Int -> Boolean - 424. -- ##Int.leadingZeros + 440. -- ##Int.leadingZeros builtin.Int.leadingZeros : Int -> Nat - 425. -- ##Int.< + 441. -- ##Int.< builtin.Int.lt : Int -> Int -> Boolean - 426. -- ##Int.<= + 442. -- ##Int.<= builtin.Int.lteq : Int -> Int -> Boolean - 427. -- ##Int.mod + 443. -- ##Int.mod builtin.Int.mod : Int -> Int -> Int - 428. -- ##Int.negate + 444. -- ##Int.negate builtin.Int.negate : Int -> Int - 429. -- ##Int.or + 445. -- ##Int.or builtin.Int.or : Int -> Int -> Int - 430. -- ##Int.popCount + 446. -- ##Int.popCount builtin.Int.popCount : Int -> Nat - 431. -- ##Int.pow + 447. -- ##Int.pow builtin.Int.pow : Int -> Nat -> Int - 432. -- ##Int.shiftLeft + 448. -- ##Int.shiftLeft builtin.Int.shiftLeft : Int -> Nat -> Int - 433. -- ##Int.shiftRight + 449. -- ##Int.shiftRight builtin.Int.shiftRight : Int -> Nat -> Int - 434. -- ##Int.signum + 450. -- ##Int.signum builtin.Int.signum : Int -> Int - 435. -- ##Int.toFloat + 451. -- ##Int.toFloat builtin.Int.toFloat : Int -> Float - 436. -- ##Int.toRepresentation + 452. -- ##Int.toRepresentation builtin.Int.toRepresentation : Int -> Nat - 437. -- ##Int.toText + 453. -- ##Int.toText builtin.Int.toText : Int -> Text - 438. -- ##Int.trailingZeros + 454. -- ##Int.trailingZeros builtin.Int.trailingZeros : Int -> Nat - 439. -- ##Int.truncate0 + 455. -- ##Int.truncate0 builtin.Int.truncate0 : Int -> Nat - 440. -- ##Int.xor + 456. -- ##Int.xor builtin.Int.xor : Int -> Int -> Int - 441. -- ##Integer + 457. -- ##Integer builtin type builtin.Integer - 442. -- ##Integer.abs + 458. -- ##Integer.abs builtin.Integer.abs : Integer -> Integer - 443. -- ##Integer.add + 459. -- ##Integer.add builtin.Integer.add : Integer -> Integer -> Integer - 444. -- ##Integer.and + 460. -- ##Integer.and builtin.Integer.and : Integer -> Integer -> Integer - 445. -- ##Integer.div + 461. -- ##Integer.div builtin.Integer.div : Integer -> Integer -> Integer - 446. -- ##Integer.eq + 462. -- ##Integer.eq builtin.Integer.eq : Integer -> Integer -> Boolean - 447. -- ##Integer.fromInt + 463. -- ##Integer.fromInt builtin.Integer.fromInt : Int -> Integer - 448. -- ##Integer.fromText + 464. -- ##Integer.fromText builtin.Integer.fromText : Text -> Optional Integer - 449. -- ##Integer.gt + 465. -- ##Integer.gt builtin.Integer.gt : Integer -> Integer -> Boolean - 450. -- ##Integer.gteq + 466. -- ##Integer.gteq builtin.Integer.gteq : Integer -> Integer -> Boolean - 451. -- ##Integer.isEven + 467. -- ##Integer.isEven builtin.Integer.isEven : Integer -> Boolean - 452. -- ##Integer.isOdd + 468. -- ##Integer.isOdd builtin.Integer.isOdd : Integer -> Boolean - 453. -- ##Integer.lt + 469. -- ##Integer.lt builtin.Integer.lt : Integer -> Integer -> Boolean - 454. -- ##Integer.lteq + 470. -- ##Integer.lteq builtin.Integer.lteq : Integer -> Integer -> Boolean - 455. -- ##Integer.mod + 471. -- ##Integer.mod builtin.Integer.mod : Integer -> Integer -> Integer - 456. -- ##Integer.mul + 472. -- ##Integer.mul builtin.Integer.mul : Integer -> Integer -> Integer - 457. -- ##Integer.neg + 473. -- ##Integer.neg builtin.Integer.neg : Integer -> Integer - 458. -- ##Integer.not + 474. -- ##Integer.not builtin.Integer.not : Integer -> Integer - 459. -- ##Integer.or + 475. -- ##Integer.or builtin.Integer.or : Integer -> Integer -> Integer - 460. -- ##Integer.popCount + 476. -- ##Integer.popCount builtin.Integer.popCount : Integer -> Nat - 461. -- ##Integer.pow + 477. -- ##Integer.pow builtin.Integer.pow : Integer -> Integer -> Integer - 462. -- ##Integer.shiftLeft + 478. -- ##Integer.shiftLeft builtin.Integer.shiftLeft : Integer -> Nat -> Integer - 463. -- ##Integer.shiftRight + 479. -- ##Integer.shiftRight builtin.Integer.shiftRight : Integer -> Nat -> Integer - 464. -- ##Integer.signum + 480. -- ##Integer.signum builtin.Integer.signum : Integer -> Int - 465. -- ##Integer.sub + 481. -- ##Integer.sub builtin.Integer.sub : Integer -> Integer -> Integer - 466. -- ##Integer.toFloat + 482. -- ##Integer.toFloat builtin.Integer.toFloat : Integer -> Float - 467. -- ##Integer.toInt + 483. -- ##Integer.toInt builtin.Integer.toInt : Integer -> Int - 468. -- ##Integer.toText + 484. -- ##Integer.toText builtin.Integer.toText : Integer -> Text - 469. -- ##Integer.unsafeFromText + 485. -- ##Integer.unsafeFromText builtin.Integer.unsafeFromText : Text -> Integer - 470. -- ##Integer.xor + 486. -- ##Integer.xor builtin.Integer.xor : Integer -> Integer -> Integer - 471. -- #s6ijmhqkkaus51chjgahogc7sdrqj9t66i599le2k7ts6fkl216f997hbses3mqk6a21vaj3cm1mertbldn0g503jt522vfo4rfv720 + 487. -- #s6ijmhqkkaus51chjgahogc7sdrqj9t66i599le2k7ts6fkl216f997hbses3mqk6a21vaj3cm1mertbldn0g503jt522vfo4rfv720 type builtin.io2.ArithmeticFailure - 472. -- #6dtvam7msqc64dimm8p0d8ehdf0330o4qbd2fdafb11jj1c2rg4ke3jdcmbgo6s4pf2jgm0vb76jeavv4ba6ht71t74p963a1miekag + 488. -- #6dtvam7msqc64dimm8p0d8ehdf0330o4qbd2fdafb11jj1c2rg4ke3jdcmbgo6s4pf2jgm0vb76jeavv4ba6ht71t74p963a1miekag type builtin.io2.ArrayFailure - 473. -- #dc6n5ebu839ik3b6ohmnqm6p0cifn7o94em1g41mjp4ae0gmv3b4rupba499lbasfrp4bqce9u4hd6518unlbg8vk993c0q6rigos98 + 489. -- #dc6n5ebu839ik3b6ohmnqm6p0cifn7o94em1g41mjp4ae0gmv3b4rupba499lbasfrp4bqce9u4hd6518unlbg8vk993c0q6rigos98 type builtin.io2.BufferMode - 474. -- #dc6n5ebu839ik3b6ohmnqm6p0cifn7o94em1g41mjp4ae0gmv3b4rupba499lbasfrp4bqce9u4hd6518unlbg8vk993c0q6rigos98#2 + 490. -- #dc6n5ebu839ik3b6ohmnqm6p0cifn7o94em1g41mjp4ae0gmv3b4rupba499lbasfrp4bqce9u4hd6518unlbg8vk993c0q6rigos98#2 builtin.io2.BufferMode.BlockBuffering : BufferMode - 475. -- #dc6n5ebu839ik3b6ohmnqm6p0cifn7o94em1g41mjp4ae0gmv3b4rupba499lbasfrp4bqce9u4hd6518unlbg8vk993c0q6rigos98#1 + 491. -- #dc6n5ebu839ik3b6ohmnqm6p0cifn7o94em1g41mjp4ae0gmv3b4rupba499lbasfrp4bqce9u4hd6518unlbg8vk993c0q6rigos98#1 builtin.io2.BufferMode.LineBuffering : BufferMode - 476. -- #dc6n5ebu839ik3b6ohmnqm6p0cifn7o94em1g41mjp4ae0gmv3b4rupba499lbasfrp4bqce9u4hd6518unlbg8vk993c0q6rigos98#0 + 492. -- #dc6n5ebu839ik3b6ohmnqm6p0cifn7o94em1g41mjp4ae0gmv3b4rupba499lbasfrp4bqce9u4hd6518unlbg8vk993c0q6rigos98#0 builtin.io2.BufferMode.NoBuffering : BufferMode - 477. -- #dc6n5ebu839ik3b6ohmnqm6p0cifn7o94em1g41mjp4ae0gmv3b4rupba499lbasfrp4bqce9u4hd6518unlbg8vk993c0q6rigos98#3 + 493. -- #dc6n5ebu839ik3b6ohmnqm6p0cifn7o94em1g41mjp4ae0gmv3b4rupba499lbasfrp4bqce9u4hd6518unlbg8vk993c0q6rigos98#3 builtin.io2.BufferMode.SizedBlockBuffering : Nat -> BufferMode - 478. -- ##Clock.internals.monotonic.v1 + 494. -- ##Clock.internals.monotonic.v1 builtin.io2.Clock.internals.monotonic : '{IO} Either Failure TimeSpec - 479. -- ##Clock.internals.nsec.v1 + 495. -- ##Clock.internals.nsec.v1 builtin.io2.Clock.internals.nsec : TimeSpec -> Nat - 480. -- ##Clock.internals.processCPUTime.v1 + 496. -- ##Clock.internals.processCPUTime.v1 builtin.io2.Clock.internals.processCPUTime : '{IO} Either Failure TimeSpec - 481. -- ##Clock.internals.realtime.v1 + 497. -- ##Clock.internals.realtime.v1 builtin.io2.Clock.internals.realtime : '{IO} Either Failure TimeSpec - 482. -- ##Clock.internals.sec.v1 + 498. -- ##Clock.internals.sec.v1 builtin.io2.Clock.internals.sec : TimeSpec -> Int - 483. -- ##Clock.internals.systemTimeZone.v1 + 499. -- ##Clock.internals.systemTimeZone.v1 builtin.io2.Clock.internals.systemTimeZone : Int ->{IO} (Int, Nat, Text) - 484. -- ##Clock.internals.threadCPUTime.v1 + 500. -- ##Clock.internals.threadCPUTime.v1 builtin.io2.Clock.internals.threadCPUTime : '{IO} Either Failure TimeSpec - 485. -- ##TimeSpec + 501. -- ##TimeSpec builtin type builtin.io2.Clock.internals.TimeSpec - 486. -- #r29dja8j9dmjjp45trccchaata8eo1h6d6haar1eai74pq1jt4m7u3ldhlq79f7phfo57eq4bau39vqotl2h63k7ff1m5sj5o9ajuf8 + 502. -- #r29dja8j9dmjjp45trccchaata8eo1h6d6haar1eai74pq1jt4m7u3ldhlq79f7phfo57eq4bau39vqotl2h63k7ff1m5sj5o9ajuf8 type builtin.io2.Failure - 487. -- #r29dja8j9dmjjp45trccchaata8eo1h6d6haar1eai74pq1jt4m7u3ldhlq79f7phfo57eq4bau39vqotl2h63k7ff1m5sj5o9ajuf8#0 + 503. -- #r29dja8j9dmjjp45trccchaata8eo1h6d6haar1eai74pq1jt4m7u3ldhlq79f7phfo57eq4bau39vqotl2h63k7ff1m5sj5o9ajuf8#0 builtin.io2.Failure.Failure : Type -> Text -> Any -> Failure - 488. -- #jhnlob35huv3rr7jg6aa4gtd8okhprla7gvlq8io429qita8vj7k696n9jvp4b8ct9i2pc1jodb8ap2bipqtgp138epdgfcth7vqvt8 + 504. -- #jhnlob35huv3rr7jg6aa4gtd8okhprla7gvlq8io429qita8vj7k696n9jvp4b8ct9i2pc1jodb8ap2bipqtgp138epdgfcth7vqvt8 type builtin.io2.FileMode - 489. -- #jhnlob35huv3rr7jg6aa4gtd8okhprla7gvlq8io429qita8vj7k696n9jvp4b8ct9i2pc1jodb8ap2bipqtgp138epdgfcth7vqvt8#2 + 505. -- #jhnlob35huv3rr7jg6aa4gtd8okhprla7gvlq8io429qita8vj7k696n9jvp4b8ct9i2pc1jodb8ap2bipqtgp138epdgfcth7vqvt8#2 builtin.io2.FileMode.Append : FileMode - 490. -- #jhnlob35huv3rr7jg6aa4gtd8okhprla7gvlq8io429qita8vj7k696n9jvp4b8ct9i2pc1jodb8ap2bipqtgp138epdgfcth7vqvt8#0 + 506. -- #jhnlob35huv3rr7jg6aa4gtd8okhprla7gvlq8io429qita8vj7k696n9jvp4b8ct9i2pc1jodb8ap2bipqtgp138epdgfcth7vqvt8#0 builtin.io2.FileMode.Read : FileMode - 491. -- #jhnlob35huv3rr7jg6aa4gtd8okhprla7gvlq8io429qita8vj7k696n9jvp4b8ct9i2pc1jodb8ap2bipqtgp138epdgfcth7vqvt8#3 + 507. -- #jhnlob35huv3rr7jg6aa4gtd8okhprla7gvlq8io429qita8vj7k696n9jvp4b8ct9i2pc1jodb8ap2bipqtgp138epdgfcth7vqvt8#3 builtin.io2.FileMode.ReadWrite : FileMode - 492. -- #jhnlob35huv3rr7jg6aa4gtd8okhprla7gvlq8io429qita8vj7k696n9jvp4b8ct9i2pc1jodb8ap2bipqtgp138epdgfcth7vqvt8#1 + 508. -- #jhnlob35huv3rr7jg6aa4gtd8okhprla7gvlq8io429qita8vj7k696n9jvp4b8ct9i2pc1jodb8ap2bipqtgp138epdgfcth7vqvt8#1 builtin.io2.FileMode.Write : FileMode - 493. -- ##Handle + 509. -- ##Handle builtin type builtin.io2.Handle - 494. -- ##IO + 510. -- ##IO builtin type builtin.io2.IO - 495. -- ##IO.array + 511. -- ##IO.array builtin.io2.IO.array : Nat ->{IO} MutableArray {IO} a - 496. -- ##IO.arrayOf + 512. -- ##IO.arrayOf builtin.io2.IO.arrayOf : a -> Nat ->{IO} MutableArray {IO} a - 497. -- ##IO.bytearray + 513. -- ##IO.bytearray builtin.io2.IO.bytearray : Nat ->{IO} MutableByteArray {IO} - 498. -- ##IO.bytearrayOf + 514. -- ##IO.bytearrayOf builtin.io2.IO.bytearrayOf : Nat -> Nat ->{IO} MutableByteArray {IO} - 499. -- ##IO.clientSocket.impl.v3 + 515. -- ##IO.clientSocket.impl.v3 builtin.io2.IO.clientSocket.impl : Text -> Text ->{IO} Either Failure Socket - 500. -- ##IO.closeFile.impl.v3 + 516. -- ##IO.closeFile.impl.v3 builtin.io2.IO.closeFile.impl : Handle ->{IO} Either Failure () - 501. -- ##IO.closeSocket.impl.v3 + 517. -- ##IO.closeSocket.impl.v3 builtin.io2.IO.closeSocket.impl : Socket ->{IO} Either Failure () - 502. -- ##IO.createDirectory.impl.v3 + 518. -- ##IO.createDirectory.impl.v3 builtin.io2.IO.createDirectory.impl : Text ->{IO} Either Failure () - 503. -- ##IO.createTempDirectory.impl.v3 + 519. -- ##IO.createTempDirectory.impl.v3 builtin.io2.IO.createTempDirectory.impl : Text ->{IO} Either Failure Text - 504. -- ##IO.delay.impl.v3 + 520. -- ##IO.delay.impl.v3 builtin.io2.IO.delay.impl : Nat ->{IO} Either Failure () - 505. -- ##IO.directoryContents.impl.v3 + 521. -- ##IO.directoryContents.impl.v3 builtin.io2.IO.directoryContents.impl : Text ->{IO} Either Failure [Text] - 506. -- ##IO.fileExists.impl.v3 + 522. -- ##IO.fileExists.impl.v3 builtin.io2.IO.fileExists.impl : Text ->{IO} Either Failure Boolean - 507. -- ##IO.fillBuf.impl.v1 + 523. -- ##IO.fillBuf.impl.v1 builtin.io2.IO.fillBuf.impl : Handle -> PinnedByteArray g -> Nat ->{IO} Either Failure Nat - 508. -- ##IO.forkComp.v2 + 524. -- ##IO.forkComp.v2 builtin.io2.IO.forkComp : '{IO} a ->{IO} ThreadId - 509. -- ##IO.getArgs.impl.v1 + 525. -- ##IO.getArgs.impl.v1 builtin.io2.IO.getArgs.impl : '{IO} Either Failure [Text] - 510. -- ##IO.getBuffering.impl.v3 + 526. -- ##IO.getBuffering.impl.v3 builtin.io2.IO.getBuffering.impl : Handle ->{IO} Either Failure BufferMode - 511. -- ##IO.getBufSome.impl.v1 + 527. -- ##IO.getBufSome.impl.v1 builtin.io2.IO.getBufSome.impl : Handle -> PinnedByteArray g -> Nat ->{IO} Either Failure Nat - 512. -- ##IO.getBytes.impl.v3 + 528. -- ##IO.getBytes.impl.v3 builtin.io2.IO.getBytes.impl : Handle -> Nat ->{IO} Either Failure Bytes - 513. -- ##IO.getChar.impl.v1 + 529. -- ##IO.getChar.impl.v1 builtin.io2.IO.getChar.impl : Handle ->{IO} Either Failure Char - 514. -- ##IO.getCurrentDirectory.impl.v3 + 530. -- ##IO.getCurrentDirectory.impl.v3 builtin.io2.IO.getCurrentDirectory.impl : '{IO} Either Failure Text - 515. -- ##IO.getEcho.impl.v1 + 531. -- ##IO.getEcho.impl.v1 builtin.io2.IO.getEcho.impl : Handle ->{IO} Either Failure Boolean - 516. -- ##IO.getEnv.impl.v1 + 532. -- ##IO.getEnv.impl.v1 builtin.io2.IO.getEnv.impl : Text ->{IO} Either Failure Text - 517. -- ##IO.getFileSize.impl.v3 + 533. -- ##IO.getFileSize.impl.v3 builtin.io2.IO.getFileSize.impl : Text ->{IO} Either Failure Nat - 518. -- ##IO.getFileTimestamp.impl.v3 + 534. -- ##IO.getFileTimestamp.impl.v3 builtin.io2.IO.getFileTimestamp.impl : Text ->{IO} Either Failure Nat - 519. -- ##IO.getLine.impl.v1 + 535. -- ##IO.getLine.impl.v1 builtin.io2.IO.getLine.impl : Handle ->{IO} Either Failure Text - 520. -- ##IO.getSomeBytes.impl.v1 + 536. -- ##IO.getSomeBytes.impl.v1 builtin.io2.IO.getSomeBytes.impl : Handle -> Nat ->{IO} Either Failure Bytes - 521. -- ##IO.getTempDirectory.impl.v3 + 537. -- ##IO.getTempDirectory.impl.v3 builtin.io2.IO.getTempDirectory.impl : '{IO} Either Failure Text - 522. -- ##IO.handlePosition.impl.v3 + 538. -- ##IO.handlePosition.impl.v3 builtin.io2.IO.handlePosition.impl : Handle ->{IO} Either Failure Nat - 523. -- ##IO.isDirectory.impl.v3 + 539. -- ##IO.isDirectory.impl.v3 builtin.io2.IO.isDirectory.impl : Text ->{IO} Either Failure Boolean - 524. -- ##IO.isFileEOF.impl.v3 + 540. -- ##IO.isFileEOF.impl.v3 builtin.io2.IO.isFileEOF.impl : Handle ->{IO} Either Failure Boolean - 525. -- ##IO.isFileOpen.impl.v3 + 541. -- ##IO.isFileOpen.impl.v3 builtin.io2.IO.isFileOpen.impl : Handle ->{IO} Either Failure Boolean - 526. -- ##IO.isSeekable.impl.v3 + 542. -- ##IO.isSeekable.impl.v3 builtin.io2.IO.isSeekable.impl : Handle ->{IO} Either Failure Boolean - 527. -- ##IO.kill.impl.v3 + 543. -- ##IO.kill.impl.v3 builtin.io2.IO.kill.impl : ThreadId ->{IO} Either Failure () - 528. -- ##IO.listen.impl.v3 + 544. -- ##IO.listen.impl.v3 builtin.io2.IO.listen.impl : Socket ->{IO} Either Failure () - 529. -- ##IO.openFile.impl.v3 + 545. -- ##IO.openFile.impl.v3 builtin.io2.IO.openFile.impl : Text -> FileMode ->{IO} Either Failure Handle - 530. -- ##IO.pinnedByteArray + 546. -- ##IO.pinnedByteArray builtin.io2.IO.pinnedByteArray : Nat ->{IO} PinnedByteArray {IO} - 531. -- ##IO.pinnedByteArrayOf + 547. -- ##IO.pinnedByteArrayOf builtin.io2.IO.pinnedByteArrayOf : Nat -> Nat ->{IO} PinnedByteArray {IO} - 532. -- ##IO.process.call + 548. -- ##IO.process.call builtin.io2.IO.process.call : Text -> [Text] ->{IO} Nat - 533. -- ##IO.process.exitCode + 549. -- ##IO.process.exitCode builtin.io2.IO.process.exitCode : ProcessHandle ->{IO} Optional Nat - 534. -- ##IO.process.kill + 550. -- ##IO.process.kill builtin.io2.IO.process.kill : ProcessHandle ->{IO} () - 535. -- ##IO.process.start + 551. -- ##IO.process.start builtin.io2.IO.process.start : Text -> [Text] ->{IO} (Handle, Handle, Handle, ProcessHandle) - 536. -- ##IO.process.wait + 552. -- ##IO.process.wait builtin.io2.IO.process.wait : ProcessHandle ->{IO} Nat - 537. -- ##IO.putBuf.impl.v1 + 553. -- ##IO.putBuf.impl.v1 builtin.io2.IO.putBuf.impl : Handle -> PinnedByteArray g -> Nat ->{IO} Either Failure Nat - 538. -- ##IO.putBytes.impl.v3 + 554. -- ##IO.putBytes.impl.v3 builtin.io2.IO.putBytes.impl : Handle -> Bytes ->{IO} Either Failure () - 539. -- ##IO.randomBytes + 555. -- ##IO.randomBytes builtin.io2.IO.randomBytes : Nat ->{IO} Bytes - 540. -- ##IO.ready.impl.v1 + 556. -- ##IO.ready.impl.v1 builtin.io2.IO.ready.impl : Handle ->{IO} Either Failure Boolean - 541. -- ##IO.ref + 557. -- ##IO.ref builtin.io2.IO.ref : a ->{IO} Ref {IO} a - 542. -- ##IO.removeDirectory.impl.v3 + 558. -- ##IO.removeDirectory.impl.v3 builtin.io2.IO.removeDirectory.impl : Text ->{IO} Either Failure () - 543. -- ##IO.removeFile.impl.v3 + 559. -- ##IO.removeFile.impl.v3 builtin.io2.IO.removeFile.impl : Text ->{IO} Either Failure () - 544. -- ##IO.renameDirectory.impl.v3 + 560. -- ##IO.renameDirectory.impl.v3 builtin.io2.IO.renameDirectory.impl : Text -> Text ->{IO} Either Failure () - 545. -- ##IO.renameFile.impl.v3 + 561. -- ##IO.renameFile.impl.v3 builtin.io2.IO.renameFile.impl : Text -> Text ->{IO} Either Failure () - 546. -- ##IO.seekHandle.impl.v3 + 562. -- ##IO.seekHandle.impl.v3 builtin.io2.IO.seekHandle.impl : Handle -> SeekMode -> Int ->{IO} Either Failure () - 547. -- ##IO.serverSocket.impl.v3 + 563. -- ##IO.serverSocket.impl.v3 builtin.io2.IO.serverSocket.impl : Optional Text -> Text ->{IO} Either Failure Socket - 548. -- ##IO.setBuffering.impl.v3 + 564. -- ##IO.setBuffering.impl.v3 builtin.io2.IO.setBuffering.impl : Handle -> BufferMode ->{IO} Either Failure () - 549. -- ##IO.setCurrentDirectory.impl.v3 + 565. -- ##IO.setCurrentDirectory.impl.v3 builtin.io2.IO.setCurrentDirectory.impl : Text ->{IO} Either Failure () - 550. -- ##IO.setEcho.impl.v1 + 566. -- ##IO.setEcho.impl.v1 builtin.io2.IO.setEcho.impl : Handle -> Boolean ->{IO} Either Failure () - 551. -- ##IO.socketAccept.impl.v3 + 567. -- ##IO.socketAccept.impl.v3 builtin.io2.IO.socketAccept.impl : Socket ->{IO} Either Failure Socket - 552. -- ##IO.socketPort.impl.v3 + 568. -- ##IO.socketPort.impl.v3 builtin.io2.IO.socketPort.impl : Socket ->{IO} Either Failure Nat - 553. -- ##IO.socketReceive.impl.v3 + 569. -- ##IO.socketReceive.impl.v3 builtin.io2.IO.socketReceive.impl : Socket -> Nat ->{IO} Either Failure Bytes - 554. -- ##IO.socketReceiveBuf.impl.v1 + 570. -- ##IO.socketReceiveBuf.impl.v1 builtin.io2.IO.socketReceiveBuf.impl : Socket -> PinnedByteArray {IO} -> Nat ->{IO} Either Failure Nat - 555. -- ##IO.socketSend.impl.v3 + 571. -- ##IO.socketSend.impl.v3 builtin.io2.IO.socketSend.impl : Socket -> Bytes ->{IO} Either Failure () - 556. -- ##IO.socketSendBuf.impl.v1 + 572. -- ##IO.socketSendBuf.impl.v1 builtin.io2.IO.socketSendBuf.impl : Socket -> PinnedByteArray {IO} -> Nat ->{IO} Either Failure () - 557. -- ##IO.stdHandle + 573. -- ##IO.stdHandle builtin.io2.IO.stdHandle : StdHandle -> Handle - 558. -- ##IO.systemTime.impl.v3 + 574. -- ##IO.systemTime.impl.v3 builtin.io2.IO.systemTime.impl : '{IO} Either Failure Nat - 559. -- ##IO.systemTimeMicroseconds.v1 + 575. -- ##IO.systemTimeMicroseconds.v1 builtin.io2.IO.systemTimeMicroseconds : '{IO} Int - 560. -- ##IO.tryEval + 576. -- ##IO.tryEval builtin.io2.IO.tryEval : '{IO} a ->{IO, Exception} a - 561. -- ##IO.UDP.ClientSockAddr.toText.v1 + 577. -- ##IO.UDP.ClientSockAddr.toText.v1 builtin.io2.IO.UDP.ClientSockAddr.toText : ClientSockAddr -> Text - 562. -- ##IO.UDP.clientSocket.impl.v1 + 578. -- ##IO.UDP.clientSocket.impl.v1 builtin.io2.IO.UDP.clientSocket.impl : Text -> Text ->{IO} Either Failure UDPSocket - 563. -- ##IO.UDP.ListenSocket.close.impl.v1 + 579. -- ##IO.UDP.ListenSocket.close.impl.v1 builtin.io2.IO.UDP.ListenSocket.close.impl : ListenSocket ->{IO} Either Failure () - 564. -- ##IO.UDP.ListenSocket.recvFrom.impl.v1 + 580. -- ##IO.UDP.ListenSocket.recvFrom.impl.v1 builtin.io2.IO.UDP.ListenSocket.recvFrom.impl : ListenSocket ->{IO} Either Failure (Bytes, ClientSockAddr) - 565. -- ##IO.UDP.ListenSocket.sendTo.impl.v1 + 581. -- ##IO.UDP.ListenSocket.sendTo.impl.v1 builtin.io2.IO.UDP.ListenSocket.sendTo.impl : ListenSocket -> Bytes -> ClientSockAddr ->{IO} Either Failure () - 566. -- ##IO.UDP.ListenSocket.toText.impl.v1 + 582. -- ##IO.UDP.ListenSocket.toText.impl.v1 builtin.io2.IO.UDP.ListenSocket.toText.impl : ListenSocket -> Text - 567. -- ##IO.UDP.serverSocket.impl.v1 + 583. -- ##IO.UDP.serverSocket.impl.v1 builtin.io2.IO.UDP.serverSocket.impl : Text -> Text ->{IO} Either Failure ListenSocket - 568. -- ##IO.UDP.UDPSocket.close.impl.v1 + 584. -- ##IO.UDP.UDPSocket.close.impl.v1 builtin.io2.IO.UDP.UDPSocket.close.impl : UDPSocket ->{IO} Either Failure () - 569. -- ##IO.UDP.UDPSocket.recv.impl.v1 + 585. -- ##IO.UDP.UDPSocket.recv.impl.v1 builtin.io2.IO.UDP.UDPSocket.recv.impl : UDPSocket ->{IO} Either Failure Bytes - 570. -- ##IO.UDP.UDPSocket.send.impl.v1 + 586. -- ##IO.UDP.UDPSocket.send.impl.v1 builtin.io2.IO.UDP.UDPSocket.send.impl : UDPSocket -> Bytes ->{IO} Either Failure () - 571. -- ##IO.UDP.UDPSocket.toText.impl.v1 + 587. -- ##IO.UDP.UDPSocket.toText.impl.v1 builtin.io2.IO.UDP.UDPSocket.toText.impl : UDPSocket -> Text - 572. -- #h4smnou0l3fg4dn92g2r88j0imfvufjerkgbuscvvmaprv12l22nk6sff3c12edlikb2vfg3vfdj4b23a09q4lvtk75ckbe4lsmtuc0 + 588. -- #h4smnou0l3fg4dn92g2r88j0imfvufjerkgbuscvvmaprv12l22nk6sff3c12edlikb2vfg3vfdj4b23a09q4lvtk75ckbe4lsmtuc0 type builtin.io2.IOError - 573. -- #h4smnou0l3fg4dn92g2r88j0imfvufjerkgbuscvvmaprv12l22nk6sff3c12edlikb2vfg3vfdj4b23a09q4lvtk75ckbe4lsmtuc0#0 + 589. -- #h4smnou0l3fg4dn92g2r88j0imfvufjerkgbuscvvmaprv12l22nk6sff3c12edlikb2vfg3vfdj4b23a09q4lvtk75ckbe4lsmtuc0#0 builtin.io2.IOError.AlreadyExists : IOError - 574. -- #h4smnou0l3fg4dn92g2r88j0imfvufjerkgbuscvvmaprv12l22nk6sff3c12edlikb2vfg3vfdj4b23a09q4lvtk75ckbe4lsmtuc0#4 + 590. -- #h4smnou0l3fg4dn92g2r88j0imfvufjerkgbuscvvmaprv12l22nk6sff3c12edlikb2vfg3vfdj4b23a09q4lvtk75ckbe4lsmtuc0#4 builtin.io2.IOError.EOF : IOError - 575. -- #h4smnou0l3fg4dn92g2r88j0imfvufjerkgbuscvvmaprv12l22nk6sff3c12edlikb2vfg3vfdj4b23a09q4lvtk75ckbe4lsmtuc0#5 + 591. -- #h4smnou0l3fg4dn92g2r88j0imfvufjerkgbuscvvmaprv12l22nk6sff3c12edlikb2vfg3vfdj4b23a09q4lvtk75ckbe4lsmtuc0#5 builtin.io2.IOError.IllegalOperation : IOError - 576. -- #h4smnou0l3fg4dn92g2r88j0imfvufjerkgbuscvvmaprv12l22nk6sff3c12edlikb2vfg3vfdj4b23a09q4lvtk75ckbe4lsmtuc0#1 + 592. -- #h4smnou0l3fg4dn92g2r88j0imfvufjerkgbuscvvmaprv12l22nk6sff3c12edlikb2vfg3vfdj4b23a09q4lvtk75ckbe4lsmtuc0#1 builtin.io2.IOError.NoSuchThing : IOError - 577. -- #h4smnou0l3fg4dn92g2r88j0imfvufjerkgbuscvvmaprv12l22nk6sff3c12edlikb2vfg3vfdj4b23a09q4lvtk75ckbe4lsmtuc0#6 + 593. -- #h4smnou0l3fg4dn92g2r88j0imfvufjerkgbuscvvmaprv12l22nk6sff3c12edlikb2vfg3vfdj4b23a09q4lvtk75ckbe4lsmtuc0#6 builtin.io2.IOError.PermissionDenied : IOError - 578. -- #h4smnou0l3fg4dn92g2r88j0imfvufjerkgbuscvvmaprv12l22nk6sff3c12edlikb2vfg3vfdj4b23a09q4lvtk75ckbe4lsmtuc0#2 + 594. -- #h4smnou0l3fg4dn92g2r88j0imfvufjerkgbuscvvmaprv12l22nk6sff3c12edlikb2vfg3vfdj4b23a09q4lvtk75ckbe4lsmtuc0#2 builtin.io2.IOError.ResourceBusy : IOError - 579. -- #h4smnou0l3fg4dn92g2r88j0imfvufjerkgbuscvvmaprv12l22nk6sff3c12edlikb2vfg3vfdj4b23a09q4lvtk75ckbe4lsmtuc0#3 + 595. -- #h4smnou0l3fg4dn92g2r88j0imfvufjerkgbuscvvmaprv12l22nk6sff3c12edlikb2vfg3vfdj4b23a09q4lvtk75ckbe4lsmtuc0#3 builtin.io2.IOError.ResourceExhausted : IOError - 580. -- #h4smnou0l3fg4dn92g2r88j0imfvufjerkgbuscvvmaprv12l22nk6sff3c12edlikb2vfg3vfdj4b23a09q4lvtk75ckbe4lsmtuc0#7 + 596. -- #h4smnou0l3fg4dn92g2r88j0imfvufjerkgbuscvvmaprv12l22nk6sff3c12edlikb2vfg3vfdj4b23a09q4lvtk75ckbe4lsmtuc0#7 builtin.io2.IOError.UserError : IOError - 581. -- #6ivk1e38hh0l9gcl8fn4mhf8bmak3qaji36vevg5e1n16ju5i4cl9u5gmqi7u16b907rd98gd60pouma892efbqt2ri58tmu99hp77g + 597. -- #6ivk1e38hh0l9gcl8fn4mhf8bmak3qaji36vevg5e1n16ju5i4cl9u5gmqi7u16b907rd98gd60pouma892efbqt2ri58tmu99hp77g type builtin.io2.IOFailure - 582. -- #574pvphqahl981k517dtrqtq812m05h3hj6t2bt9sn3pknenfik1krscfdb6r66nf1sm7g3r1r56k0c6ob7vg4opfq4gihi8njbnhsg + 598. -- #574pvphqahl981k517dtrqtq812m05h3hj6t2bt9sn3pknenfik1krscfdb6r66nf1sm7g3r1r56k0c6ob7vg4opfq4gihi8njbnhsg type builtin.io2.MiscFailure - 583. -- ##MVar + 599. -- ##MVar builtin type builtin.io2.MVar - 584. -- ##MVar.isEmpty + 600. -- ##MVar.isEmpty builtin.io2.MVar.isEmpty : MVar a ->{IO} Boolean - 585. -- ##MVar.new + 601. -- ##MVar.new builtin.io2.MVar.new : a ->{IO} MVar a - 586. -- ##MVar.newEmpty.v2 + 602. -- ##MVar.newEmpty.v2 builtin.io2.MVar.newEmpty : '{IO} MVar a - 587. -- ##MVar.put.impl.v3 + 603. -- ##MVar.put.impl.v3 builtin.io2.MVar.put.impl : MVar a -> a ->{IO} Either Failure () - 588. -- ##MVar.read.impl.v3 + 604. -- ##MVar.read.impl.v3 builtin.io2.MVar.read.impl : MVar a ->{IO} Either Failure a - 589. -- ##MVar.swap.impl.v3 + 605. -- ##MVar.swap.impl.v3 builtin.io2.MVar.swap.impl : MVar a -> a ->{IO} Either Failure a - 590. -- ##MVar.take.impl.v3 + 606. -- ##MVar.take.impl.v3 builtin.io2.MVar.take.impl : MVar a ->{IO} Either Failure a - 591. -- ##MVar.tryPut.impl.v3 + 607. -- ##MVar.tryPut.impl.v3 builtin.io2.MVar.tryPut.impl : MVar a -> a ->{IO} Either Failure Boolean - 592. -- ##MVar.tryRead.impl.v3 + 608. -- ##MVar.tryRead.impl.v3 builtin.io2.MVar.tryRead.impl : MVar a ->{IO} Either Failure (Optional a) - 593. -- ##MVar.tryTake + 609. -- ##MVar.tryTake builtin.io2.MVar.tryTake : MVar a ->{IO} Optional a - 594. -- ##ProcessHandle + 610. -- ##ProcessHandle builtin type builtin.io2.ProcessHandle - 595. -- ##Promise + 611. -- ##Promise builtin type builtin.io2.Promise - 596. -- ##Promise.new + 612. -- ##Promise.new builtin.io2.Promise.new : '{IO} Promise a - 597. -- ##Promise.read + 613. -- ##Promise.read builtin.io2.Promise.read : Promise a ->{IO} a - 598. -- ##Promise.tryRead + 614. -- ##Promise.tryRead builtin.io2.Promise.tryRead : Promise a ->{IO} Optional a - 599. -- ##Promise.write + 615. -- ##Promise.write builtin.io2.Promise.write : Promise a -> a ->{IO} Boolean - 600. -- ##Ref.cas + 616. -- ##Ref.cas builtin.io2.Ref.cas : Ref {IO} a -> Ticket a -> a ->{IO} Boolean - 601. -- ##Ref.readForCas + 617. -- ##Ref.readForCas builtin.io2.Ref.readForCas : Ref {IO} a ->{IO} Ticket a - 602. -- ##Ref.Ticket + 618. -- ##Ref.Ticket builtin type builtin.io2.Ref.Ticket - 603. -- ##Ref.Ticket.read + 619. -- ##Ref.Ticket.read builtin.io2.Ref.Ticket.read : Ticket a -> a - 604. -- #vph2eas3lf2gi259f3khlrspml3id2l8u0ru07kb5fd833h238jk4iauju0b6decth9i3nao5jkf5eej1e1kovgmu5tghhh8jq3i7p8 + 620. -- #vph2eas3lf2gi259f3khlrspml3id2l8u0ru07kb5fd833h238jk4iauju0b6decth9i3nao5jkf5eej1e1kovgmu5tghhh8jq3i7p8 type builtin.io2.RuntimeFailure - 605. -- ##sandboxLinks + 621. -- ##sandboxLinks builtin.io2.sandboxLinks : Link.Term ->{IO} [Link.Term] - 606. -- #1bca3hq98sfgr6a4onuon1tsda69cdjggq8pkmlsfola6492dbrih5up6dv18ptfbqeocm9q6parf64pj773p7p19qe76238o4trc40 + 622. -- #1bca3hq98sfgr6a4onuon1tsda69cdjggq8pkmlsfola6492dbrih5up6dv18ptfbqeocm9q6parf64pj773p7p19qe76238o4trc40 type builtin.io2.SeekMode - 607. -- #1bca3hq98sfgr6a4onuon1tsda69cdjggq8pkmlsfola6492dbrih5up6dv18ptfbqeocm9q6parf64pj773p7p19qe76238o4trc40#0 + 623. -- #1bca3hq98sfgr6a4onuon1tsda69cdjggq8pkmlsfola6492dbrih5up6dv18ptfbqeocm9q6parf64pj773p7p19qe76238o4trc40#0 builtin.io2.SeekMode.AbsoluteSeek : SeekMode - 608. -- #1bca3hq98sfgr6a4onuon1tsda69cdjggq8pkmlsfola6492dbrih5up6dv18ptfbqeocm9q6parf64pj773p7p19qe76238o4trc40#1 + 624. -- #1bca3hq98sfgr6a4onuon1tsda69cdjggq8pkmlsfola6492dbrih5up6dv18ptfbqeocm9q6parf64pj773p7p19qe76238o4trc40#1 builtin.io2.SeekMode.RelativeSeek : SeekMode - 609. -- #1bca3hq98sfgr6a4onuon1tsda69cdjggq8pkmlsfola6492dbrih5up6dv18ptfbqeocm9q6parf64pj773p7p19qe76238o4trc40#2 + 625. -- #1bca3hq98sfgr6a4onuon1tsda69cdjggq8pkmlsfola6492dbrih5up6dv18ptfbqeocm9q6parf64pj773p7p19qe76238o4trc40#2 builtin.io2.SeekMode.SeekFromEnd : SeekMode - 610. -- ##Socket + 626. -- ##Socket builtin type builtin.io2.Socket - 611. -- #121tku5rfh21t247v1cakhd6ir44fakkqsm799rrfp5qcjdls4nvdu4r3nco80stdd86tdo2hhh0ulcpoaofnrnkjun04kqnfmjqio8 + 627. -- #121tku5rfh21t247v1cakhd6ir44fakkqsm799rrfp5qcjdls4nvdu4r3nco80stdd86tdo2hhh0ulcpoaofnrnkjun04kqnfmjqio8 type builtin.io2.StdHandle - 612. -- #121tku5rfh21t247v1cakhd6ir44fakkqsm799rrfp5qcjdls4nvdu4r3nco80stdd86tdo2hhh0ulcpoaofnrnkjun04kqnfmjqio8#2 + 628. -- #121tku5rfh21t247v1cakhd6ir44fakkqsm799rrfp5qcjdls4nvdu4r3nco80stdd86tdo2hhh0ulcpoaofnrnkjun04kqnfmjqio8#2 builtin.io2.StdHandle.StdErr : StdHandle - 613. -- #121tku5rfh21t247v1cakhd6ir44fakkqsm799rrfp5qcjdls4nvdu4r3nco80stdd86tdo2hhh0ulcpoaofnrnkjun04kqnfmjqio8#0 + 629. -- #121tku5rfh21t247v1cakhd6ir44fakkqsm799rrfp5qcjdls4nvdu4r3nco80stdd86tdo2hhh0ulcpoaofnrnkjun04kqnfmjqio8#0 builtin.io2.StdHandle.StdIn : StdHandle - 614. -- #121tku5rfh21t247v1cakhd6ir44fakkqsm799rrfp5qcjdls4nvdu4r3nco80stdd86tdo2hhh0ulcpoaofnrnkjun04kqnfmjqio8#1 + 630. -- #121tku5rfh21t247v1cakhd6ir44fakkqsm799rrfp5qcjdls4nvdu4r3nco80stdd86tdo2hhh0ulcpoaofnrnkjun04kqnfmjqio8#1 builtin.io2.StdHandle.StdOut : StdHandle - 615. -- ##STM + 631. -- ##STM builtin type builtin.io2.STM - 616. -- ##STM.atomically + 632. -- ##STM.atomically builtin.io2.STM.atomically : '{STM} a ->{IO} a - 617. -- ##STM.retry + 633. -- ##STM.retry builtin.io2.STM.retry : '{STM} a - 618. -- #cggbdfff21ac5uedf4qvn4to83clinvhsovrila35u7f7e73g4l6hoj8pjmjnk713a8luhnn4bi1j9ai1nl0can1un66hvg230eog9g + 634. -- #cggbdfff21ac5uedf4qvn4to83clinvhsovrila35u7f7e73g4l6hoj8pjmjnk713a8luhnn4bi1j9ai1nl0can1un66hvg230eog9g type builtin.io2.STMFailure - 619. -- ##ThreadId + 635. -- ##ThreadId builtin type builtin.io2.ThreadId - 620. -- #ggh649864d9bfnk90n7kgtj7dflddc4kn8osu7u7mub8p7l8biid8dgtungj4u005h7karbgupfpum9jp94spks3ma1sgh39bhirv38 + 636. -- #ggh649864d9bfnk90n7kgtj7dflddc4kn8osu7u7mub8p7l8biid8dgtungj4u005h7karbgupfpum9jp94spks3ma1sgh39bhirv38 type builtin.io2.ThreadKilledFailure - 621. -- ##Tls + 637. -- ##Tls builtin type builtin.io2.Tls - 622. -- ##Tls.Cipher + 638. -- ##Tls.Cipher builtin type builtin.io2.Tls.Cipher - 623. -- ##Tls.ClientConfig + 639. -- ##Tls.ClientConfig builtin type builtin.io2.Tls.ClientConfig - 624. -- ##Tls.ClientConfig.certificates.get + 640. -- ##Tls.ClientConfig.certificates.get builtin.io2.Tls.ClientConfig.certificates.get : ClientConfig -> [SignedCert] - 625. -- ##Tls.ClientConfig.certificates.set + 641. -- ##Tls.ClientConfig.certificates.set builtin.io2.Tls.ClientConfig.certificates.set : [SignedCert] -> ClientConfig -> ClientConfig - 626. -- ##TLS.ClientConfig.ciphers.set + 642. -- ##TLS.ClientConfig.ciphers.set builtin.io2.TLS.ClientConfig.ciphers.set : [Cipher] -> ClientConfig -> ClientConfig - 627. -- ##Tls.ClientConfig.default + 643. -- ##Tls.ClientConfig.default builtin.io2.Tls.ClientConfig.default : Text -> Bytes -> ClientConfig - 628. -- ##Tls.ClientConfig.validation.disableCertificateValidation + 644. -- ##Tls.ClientConfig.validation.disableCertificateValidation builtin.io2.Tls.ClientConfig.validation.disableCertificateValidation : ClientConfig -> ClientConfig - 629. -- ##Tls.ClientConfig.validation.disableHostNameValidation + 645. -- ##Tls.ClientConfig.validation.disableHostNameValidation builtin.io2.Tls.ClientConfig.validation.disableHostNameValidation : ClientConfig -> ClientConfig - 630. -- ##Tls.ClientConfig.versions.set + 646. -- ##Tls.ClientConfig.versions.set builtin.io2.Tls.ClientConfig.versions.set : [Version] -> ClientConfig -> ClientConfig - 631. -- ##Tls.decodeCert.impl.v3 + 647. -- ##Tls.decodeCert.impl.v3 builtin.io2.Tls.decodeCert.impl : Bytes -> Either Failure SignedCert - 632. -- ##Tls.decodePrivateKey + 648. -- ##Tls.decodePrivateKey builtin.io2.Tls.decodePrivateKey : Bytes -> [PrivateKey] - 633. -- ##Tls.encodeCert + 649. -- ##Tls.encodeCert builtin.io2.Tls.encodeCert : SignedCert -> Bytes - 634. -- ##Tls.encodePrivateKey + 650. -- ##Tls.encodePrivateKey builtin.io2.Tls.encodePrivateKey : PrivateKey -> Bytes - 635. -- ##Tls.handshake.impl.v3 + 651. -- ##Tls.handshake.impl.v3 builtin.io2.Tls.handshake.impl : Tls ->{IO} Either Failure () - 636. -- ##Tls.newClient.impl.v3 + 652. -- ##Tls.newClient.impl.v3 builtin.io2.Tls.newClient.impl : ClientConfig -> Socket ->{IO} Either Failure Tls - 637. -- ##Tls.newServer.impl.v3 + 653. -- ##Tls.newServer.impl.v3 builtin.io2.Tls.newServer.impl : ServerConfig -> Socket ->{IO} Either Failure Tls - 638. -- ##Tls.PrivateKey + 654. -- ##Tls.PrivateKey builtin type builtin.io2.Tls.PrivateKey - 639. -- ##Tls.receive.impl.v3 + 655. -- ##Tls.receive.impl.v3 builtin.io2.Tls.receive.impl : Tls ->{IO} Either Failure Bytes - 640. -- ##Tls.send.impl.v3 + 656. -- ##Tls.send.impl.v3 builtin.io2.Tls.send.impl : Tls -> Bytes ->{IO} Either Failure () - 641. -- ##Tls.ServerConfig + 657. -- ##Tls.ServerConfig builtin type builtin.io2.Tls.ServerConfig - 642. -- ##Tls.ServerConfig.certificates.get + 658. -- ##Tls.ServerConfig.certificates.get builtin.io2.Tls.ServerConfig.certificates.get : ServerConfig -> [SignedCert] - 643. -- ##Tls.ServerConfig.certificates.set + 659. -- ##Tls.ServerConfig.certificates.set builtin.io2.Tls.ServerConfig.certificates.set : [SignedCert] -> ServerConfig -> ServerConfig - 644. -- ##Tls.ServerConfig.ciphers.set + 660. -- ##Tls.ServerConfig.ciphers.set builtin.io2.Tls.ServerConfig.ciphers.set : [Cipher] -> ServerConfig -> ServerConfig - 645. -- ##Tls.ServerConfig.default + 661. -- ##Tls.ServerConfig.default builtin.io2.Tls.ServerConfig.default : [SignedCert] -> PrivateKey -> ServerConfig - 646. -- ##Tls.ServerConfig.versions.set + 662. -- ##Tls.ServerConfig.versions.set builtin.io2.Tls.ServerConfig.versions.set : [Version] -> ServerConfig -> ServerConfig - 647. -- ##Tls.SignedCert + 663. -- ##Tls.SignedCert builtin type builtin.io2.Tls.SignedCert - 648. -- ##Tls.terminate.impl.v3 + 664. -- ##Tls.terminate.impl.v3 builtin.io2.Tls.terminate.impl : Tls ->{IO} Either Failure () - 649. -- ##Tls.Version + 665. -- ##Tls.Version builtin type builtin.io2.Tls.Version - 650. -- #r3gag1btclr8iclbdt68irgt8n1d1vf7agv5umke3dgdbl11acj6easav6gtihanrjnct18om07638rne9ej06u2bkv2v4l36knm2l0 + 666. -- #r3gag1btclr8iclbdt68irgt8n1d1vf7agv5umke3dgdbl11acj6easav6gtihanrjnct18om07638rne9ej06u2bkv2v4l36knm2l0 type builtin.io2.TlsFailure - 651. -- ##TVar + 667. -- ##TVar builtin type builtin.io2.TVar - 652. -- ##TVar.new + 668. -- ##TVar.new builtin.io2.TVar.new : a ->{STM} TVar a - 653. -- ##TVar.newIO + 669. -- ##TVar.newIO builtin.io2.TVar.newIO : a ->{IO} TVar a - 654. -- ##TVar.read + 670. -- ##TVar.read builtin.io2.TVar.read : TVar a ->{STM} a - 655. -- ##TVar.readIO + 671. -- ##TVar.readIO builtin.io2.TVar.readIO : TVar a ->{IO} a - 656. -- ##TVar.swap + 672. -- ##TVar.swap builtin.io2.TVar.swap : TVar a -> a ->{STM} a - 657. -- ##TVar.write + 673. -- ##TVar.write builtin.io2.TVar.write : TVar a -> a ->{STM} () - 658. -- ##validateSandboxed + 674. -- ##validateSandboxed builtin.io2.validateSandboxed : [Link.Term] -> a -> Boolean - 659. -- ##Value.validateSandboxed + 675. -- ##Value.validateSandboxed builtin.io2.Value.validateSandboxed : [Link.Term] -> Value ->{IO} Either [Link.Term] [Link.Term] - 660. -- #c23jofurcegj93796o0karmkcm6baifupiuu1rtkniu74avn6a4r1n66ga5rml5di7easkgn4iak800u3tnb6kfisbrv6tcfgkb13a8 + 676. -- #c23jofurcegj93796o0karmkcm6baifupiuu1rtkniu74avn6a4r1n66ga5rml5di7easkgn4iak800u3tnb6kfisbrv6tcfgkb13a8 type builtin.IsPropagated - 661. -- #c23jofurcegj93796o0karmkcm6baifupiuu1rtkniu74avn6a4r1n66ga5rml5di7easkgn4iak800u3tnb6kfisbrv6tcfgkb13a8#0 + 677. -- #c23jofurcegj93796o0karmkcm6baifupiuu1rtkniu74avn6a4r1n66ga5rml5di7easkgn4iak800u3tnb6kfisbrv6tcfgkb13a8#0 builtin.IsPropagated.IsPropagated : IsPropagated - 662. -- #q6snodsh7i7u6k7gtqj73tt7nv6htjofs5f37vg2v3dsfk6hau71fs5mcv0hq3lqg111fsvoi92mngm08850aftfgh65uka9mhqvft0 + 678. -- #q6snodsh7i7u6k7gtqj73tt7nv6htjofs5f37vg2v3dsfk6hau71fs5mcv0hq3lqg111fsvoi92mngm08850aftfgh65uka9mhqvft0 type builtin.IsTest - 663. -- #q6snodsh7i7u6k7gtqj73tt7nv6htjofs5f37vg2v3dsfk6hau71fs5mcv0hq3lqg111fsvoi92mngm08850aftfgh65uka9mhqvft0#0 + 679. -- #q6snodsh7i7u6k7gtqj73tt7nv6htjofs5f37vg2v3dsfk6hau71fs5mcv0hq3lqg111fsvoi92mngm08850aftfgh65uka9mhqvft0#0 builtin.IsTest.IsTest : IsTest - 664. -- #j0uel16uheg3tdbj87msfh1isek2ml1262o562sjqpup6uh4gncgpg588u3nmdclbv8tu0c7e0943t0paud4f28dr4a9scfq2v12fpo + 680. -- #j0uel16uheg3tdbj87msfh1isek2ml1262o562sjqpup6uh4gncgpg588u3nmdclbv8tu0c7e0943t0paud4f28dr4a9scfq2v12fpo type builtin.Json - 665. -- #j0uel16uheg3tdbj87msfh1isek2ml1262o562sjqpup6uh4gncgpg588u3nmdclbv8tu0c7e0943t0paud4f28dr4a9scfq2v12fpo#5 + 681. -- #j0uel16uheg3tdbj87msfh1isek2ml1262o562sjqpup6uh4gncgpg588u3nmdclbv8tu0c7e0943t0paud4f28dr4a9scfq2v12fpo#5 builtin.Json.Array : [Json] -> Json - 666. -- #j0uel16uheg3tdbj87msfh1isek2ml1262o562sjqpup6uh4gncgpg588u3nmdclbv8tu0c7e0943t0paud4f28dr4a9scfq2v12fpo#1 + 682. -- #j0uel16uheg3tdbj87msfh1isek2ml1262o562sjqpup6uh4gncgpg588u3nmdclbv8tu0c7e0943t0paud4f28dr4a9scfq2v12fpo#1 builtin.Json.Boolean : Boolean -> Json - 667. -- #j0uel16uheg3tdbj87msfh1isek2ml1262o562sjqpup6uh4gncgpg588u3nmdclbv8tu0c7e0943t0paud4f28dr4a9scfq2v12fpo#0 + 683. -- #j0uel16uheg3tdbj87msfh1isek2ml1262o562sjqpup6uh4gncgpg588u3nmdclbv8tu0c7e0943t0paud4f28dr4a9scfq2v12fpo#0 builtin.Json.Null : Json - 668. -- #j0uel16uheg3tdbj87msfh1isek2ml1262o562sjqpup6uh4gncgpg588u3nmdclbv8tu0c7e0943t0paud4f28dr4a9scfq2v12fpo#3 + 684. -- #j0uel16uheg3tdbj87msfh1isek2ml1262o562sjqpup6uh4gncgpg588u3nmdclbv8tu0c7e0943t0paud4f28dr4a9scfq2v12fpo#3 builtin.Json.Number.Unparsed : Text -> Json - 669. -- #j0uel16uheg3tdbj87msfh1isek2ml1262o562sjqpup6uh4gncgpg588u3nmdclbv8tu0c7e0943t0paud4f28dr4a9scfq2v12fpo#2 + 685. -- #j0uel16uheg3tdbj87msfh1isek2ml1262o562sjqpup6uh4gncgpg588u3nmdclbv8tu0c7e0943t0paud4f28dr4a9scfq2v12fpo#2 builtin.Json.Object : [(Text, Json)] -> Json - 670. -- #7ndh8qr2jn3b0b4ps8pa85hm0ts3kmuvrmhne87ka0q61i4u3pvafjoetjel4s66s2sji1hp81jnbih5812hbfe3if6fc4ndnouitl8 + 686. -- #7ndh8qr2jn3b0b4ps8pa85hm0ts3kmuvrmhne87ka0q61i4u3pvafjoetjel4s66s2sji1hp81jnbih5812hbfe3if6fc4ndnouitl8 type builtin.Json.ParseError - 671. -- #7ndh8qr2jn3b0b4ps8pa85hm0ts3kmuvrmhne87ka0q61i4u3pvafjoetjel4s66s2sji1hp81jnbih5812hbfe3if6fc4ndnouitl8#0 + 687. -- #7ndh8qr2jn3b0b4ps8pa85hm0ts3kmuvrmhne87ka0q61i4u3pvafjoetjel4s66s2sji1hp81jnbih5812hbfe3if6fc4ndnouitl8#0 builtin.Json.ParseError.ParseError : Text -> Nat -> Text -> ParseError - 672. -- #j0uel16uheg3tdbj87msfh1isek2ml1262o562sjqpup6uh4gncgpg588u3nmdclbv8tu0c7e0943t0paud4f28dr4a9scfq2v12fpo#4 + 688. -- #j0uel16uheg3tdbj87msfh1isek2ml1262o562sjqpup6uh4gncgpg588u3nmdclbv8tu0c7e0943t0paud4f28dr4a9scfq2v12fpo#4 builtin.Json.Text : Text -> Json - 673. -- #68haromionghg6cvojngjrgc7t0ob658nkk8b20fpho6k6ltjtf6rfmr4ia1omige97hk34lu21qsj933vl1dkpbna7evbjfkh71r9g + 689. -- #68haromionghg6cvojngjrgc7t0ob658nkk8b20fpho6k6ltjtf6rfmr4ia1omige97hk34lu21qsj933vl1dkpbna7evbjfkh71r9g type builtin.License - 674. -- #knhl4mlkqf0mt877flahlbas2ufb7bub8f11vi9ihh9uf7r6jqaglk7rm6912q1vml50866ddl0qfa4o6d7o0gomchaoae24m0u2nk8 + 690. -- #knhl4mlkqf0mt877flahlbas2ufb7bub8f11vi9ihh9uf7r6jqaglk7rm6912q1vml50866ddl0qfa4o6d7o0gomchaoae24m0u2nk8 builtin.License.copyrightHolders : License -> [CopyrightHolder] - 675. -- #ucpi54l843bf1osaejl1cnn0jt3o89fak5c0120k8256in3m80ik836hnite0osl12m91utnpnt5n7pgm3oe1rv4r1hk8ai4033agvo + 691. -- #ucpi54l843bf1osaejl1cnn0jt3o89fak5c0120k8256in3m80ik836hnite0osl12m91utnpnt5n7pgm3oe1rv4r1hk8ai4033agvo builtin.License.copyrightHolders.modify : ([CopyrightHolder] ->{g} [CopyrightHolder]) -> License ->{g} License - 676. -- #9hbbfn61d2odn8jvtj5da9n1e9decsrheg6chg73uf94oituv3750b9hd6vp3ljhi54dkp5uqfg57j66i39bstfd8ivgav4p3si39ro + 692. -- #9hbbfn61d2odn8jvtj5da9n1e9decsrheg6chg73uf94oituv3750b9hd6vp3ljhi54dkp5uqfg57j66i39bstfd8ivgav4p3si39ro builtin.License.copyrightHolders.set : [CopyrightHolder] -> License -> License - 677. -- #68haromionghg6cvojngjrgc7t0ob658nkk8b20fpho6k6ltjtf6rfmr4ia1omige97hk34lu21qsj933vl1dkpbna7evbjfkh71r9g#0 + 693. -- #68haromionghg6cvojngjrgc7t0ob658nkk8b20fpho6k6ltjtf6rfmr4ia1omige97hk34lu21qsj933vl1dkpbna7evbjfkh71r9g#0 builtin.License.License : [CopyrightHolder] -> [Year] -> LicenseType -> License - 678. -- #aqi4h1bfq2rjnrrfanf4nut8jd1elkkc00u1tn0rmt9ocsrds8i8pha7q9cihvbiq7edpg21iqnfornimae2gad0ab8ih0bksjnoi4g + 694. -- #aqi4h1bfq2rjnrrfanf4nut8jd1elkkc00u1tn0rmt9ocsrds8i8pha7q9cihvbiq7edpg21iqnfornimae2gad0ab8ih0bksjnoi4g builtin.License.licenseType : License -> LicenseType - 679. -- #1rm8kpbv278t9tqj4jfssl8q3cn4hgu1mti7bp8lhcr5h7qmojujmt9de4c31p42to8mtav61u98oad3oen8q9im20sacs69psjpugo + 695. -- #1rm8kpbv278t9tqj4jfssl8q3cn4hgu1mti7bp8lhcr5h7qmojujmt9de4c31p42to8mtav61u98oad3oen8q9im20sacs69psjpugo builtin.License.licenseType.modify : (LicenseType ->{g} LicenseType) -> License ->{g} License - 680. -- #dv9jsg0ksrlp3g0uftvkutpa8matt039o7dhat9airnkto2b703mgoi5t412hdi95pdhp9g01luga13ihmp52nk6bgh788gts6elv2o + 696. -- #dv9jsg0ksrlp3g0uftvkutpa8matt039o7dhat9airnkto2b703mgoi5t412hdi95pdhp9g01luga13ihmp52nk6bgh788gts6elv2o builtin.License.licenseType.set : LicenseType -> License -> License - 681. -- #fh5qbeba2hg5c5k9uppi71rfghj8df37p4cg3hk23b9pv0hpm67ok807f05t368rn6v99v7kvf7cp984v8ipkjr1j1h095g6nd9jtig + 697. -- #fh5qbeba2hg5c5k9uppi71rfghj8df37p4cg3hk23b9pv0hpm67ok807f05t368rn6v99v7kvf7cp984v8ipkjr1j1h095g6nd9jtig builtin.License.years : License -> [Year] - 682. -- #2samr066hti71pf0fkvb4niemm7j3amvaap3sk1dqpihqp9g8f8lknhhmjq9atai6j5kcs4huvfokvpm15ebefmfggr4hd2cetf7co0 + 698. -- #2samr066hti71pf0fkvb4niemm7j3amvaap3sk1dqpihqp9g8f8lknhhmjq9atai6j5kcs4huvfokvpm15ebefmfggr4hd2cetf7co0 builtin.License.years.modify : ([Year] ->{g} [Year]) -> License ->{g} License - 683. -- #g3ap8lg6974au4meb2hl49k1k6f048det9uckmics3bkt9s571921ksqfdsch63k2pk3fij8pn697svniakkrueddh8nkflnmjk9ffo + 699. -- #g3ap8lg6974au4meb2hl49k1k6f048det9uckmics3bkt9s571921ksqfdsch63k2pk3fij8pn697svniakkrueddh8nkflnmjk9ffo builtin.License.years.set : [Year] -> License -> License - 684. -- #uj652rrb45urfnojgt1ssqoji7iiibu27uhrc1sfl68lm54hbr7r1dpgppsv0pvf0oile2uk2h2gn1h4vgng30fga66idihhen14qc0 + 700. -- #uj652rrb45urfnojgt1ssqoji7iiibu27uhrc1sfl68lm54hbr7r1dpgppsv0pvf0oile2uk2h2gn1h4vgng30fga66idihhen14qc0 type builtin.LicenseType - 685. -- #uj652rrb45urfnojgt1ssqoji7iiibu27uhrc1sfl68lm54hbr7r1dpgppsv0pvf0oile2uk2h2gn1h4vgng30fga66idihhen14qc0#0 + 701. -- #uj652rrb45urfnojgt1ssqoji7iiibu27uhrc1sfl68lm54hbr7r1dpgppsv0pvf0oile2uk2h2gn1h4vgng30fga66idihhen14qc0#0 builtin.LicenseType.LicenseType : Doc -> LicenseType - 686. -- #f4b37niu61dc517c32h3os36ig34fgnt7inaaoqdbecmscchthi14gdo0vj3eee1ru746ibvl9vnmm1pglrv3125qnhsbc0i1tqtic0 + 702. -- #f4b37niu61dc517c32h3os36ig34fgnt7inaaoqdbecmscchthi14gdo0vj3eee1ru746ibvl9vnmm1pglrv3125qnhsbc0i1tqtic0 type builtin.Link - 687. -- ##Link.Term + 703. -- ##Link.Term builtin type builtin.Link.Term - 688. -- #f4b37niu61dc517c32h3os36ig34fgnt7inaaoqdbecmscchthi14gdo0vj3eee1ru746ibvl9vnmm1pglrv3125qnhsbc0i1tqtic0#0 + 704. -- #f4b37niu61dc517c32h3os36ig34fgnt7inaaoqdbecmscchthi14gdo0vj3eee1ru746ibvl9vnmm1pglrv3125qnhsbc0i1tqtic0#0 builtin.Link.Term : Link.Term -> Link - 689. -- ##Link.Term.toText + 705. -- ##Link.Term.toText builtin.Link.Term.toText : Link.Term -> Text - 690. -- ##Link.Type + 706. -- ##Link.Type builtin type builtin.Link.Type - 691. -- #f4b37niu61dc517c32h3os36ig34fgnt7inaaoqdbecmscchthi14gdo0vj3eee1ru746ibvl9vnmm1pglrv3125qnhsbc0i1tqtic0#1 + 707. -- #f4b37niu61dc517c32h3os36ig34fgnt7inaaoqdbecmscchthi14gdo0vj3eee1ru746ibvl9vnmm1pglrv3125qnhsbc0i1tqtic0#1 builtin.Link.Type : Type -> Link - 692. -- ##Sequence + 708. -- ##Sequence builtin type builtin.List - 693. -- ##List.++ + 709. -- ##List.++ builtin.List.++ : [a] -> [a] -> [a] - 694. -- ##List.cons + 710. -- ##List.cons builtin.List.+:, builtin.List.cons : a -> [a] -> [a] - 695. -- ##List.snoc + 711. -- ##List.snoc builtin.List.:+, builtin.List.snoc : [a] -> a -> [a] - 696. -- ##List.at + 712. -- ##List.at builtin.List.at : Nat -> [a] -> Optional a - 697. -- ##List.cons + 713. -- ##List.cons builtin.List.cons, builtin.List.+: : a -> [a] -> [a] - 698. -- ##List.drop + 714. -- ##List.drop builtin.List.drop : Nat -> [a] -> [a] - 699. -- ##List.empty + 715. -- ##List.empty builtin.List.empty : [a] - 700. -- #6frvp5jfjtt7odi9769i0p5phuuuij1fi1d9l5ncpelh416ab3vceaphhaijh0ct0v9n793j7e4h78687oij6ai97085u63m264gj5o + 716. -- #6frvp5jfjtt7odi9769i0p5phuuuij1fi1d9l5ncpelh416ab3vceaphhaijh0ct0v9n793j7e4h78687oij6ai97085u63m264gj5o builtin.List.map : (a ->{e} b) -> [a] ->{e} [b] - 701. -- ##List.size + 717. -- ##List.size builtin.List.size : [a] -> Nat - 702. -- ##List.snoc + 718. -- ##List.snoc builtin.List.snoc, builtin.List.:+ : [a] -> a -> [a] - 703. -- ##List.take + 719. -- ##List.take builtin.List.take : Nat -> [a] -> [a] - 704. -- ##ListenSocket + 720. -- ##ListenSocket builtin type builtin.ListenSocket - 705. -- #nk9jfsoidsc5h3nhcf1p6528t6c5hqui3hridbvaqnruel4jns3qo6plgups2sgi82c9jgt9ba1qlkum1bdjdgp75h7si2thbo7tcfg + 721. -- #nk9jfsoidsc5h3nhcf1p6528t6c5hqui3hridbvaqnruel4jns3qo6plgups2sgi82c9jgt9ba1qlkum1bdjdgp75h7si2thbo7tcfg type builtin.Map k v type Map k v - 706. -- #nk9jfsoidsc5h3nhcf1p6528t6c5hqui3hridbvaqnruel4jns3qo6plgups2sgi82c9jgt9ba1qlkum1bdjdgp75h7si2thbo7tcfg#0 + 722. -- #nk9jfsoidsc5h3nhcf1p6528t6c5hqui3hridbvaqnruel4jns3qo6plgups2sgi82c9jgt9ba1qlkum1bdjdgp75h7si2thbo7tcfg#0 builtin.Map.Bin, Map.Bin : Nat -> k @@ -2573,19 +2650,19 @@ This transcript is intended to make visible accidental changes to the hashing al -> Map k v -> Map k v - 707. -- #nk9jfsoidsc5h3nhcf1p6528t6c5hqui3hridbvaqnruel4jns3qo6plgups2sgi82c9jgt9ba1qlkum1bdjdgp75h7si2thbo7tcfg#1 + 723. -- #nk9jfsoidsc5h3nhcf1p6528t6c5hqui3hridbvaqnruel4jns3qo6plgups2sgi82c9jgt9ba1qlkum1bdjdgp75h7si2thbo7tcfg#1 builtin.Map.Tip, Map.Tip : Map k v - 708. -- #cb9e3iosob3e4q0v96ifmserg27samv1lvi4dh0l0l19phvct4vbbvv19abngneb77b02h8cefr1o3ad8gnm3cn6mjgsub97gjlte8g + 724. -- #cb9e3iosob3e4q0v96ifmserg27samv1lvi4dh0l0l19phvct4vbbvv19abngneb77b02h8cefr1o3ad8gnm3cn6mjgsub97gjlte8g builtin.metadata.isPropagated : IsPropagated - 709. -- #lkpne3jg56pmqegv4jba6b5nnjg86qtfllnlmtvijql5lsf89rfu6tgb1s9ic0gsqs5si0v9agmj90lk0bhihbovd5o5ve023g4ocko + 725. -- #lkpne3jg56pmqegv4jba6b5nnjg86qtfllnlmtvijql5lsf89rfu6tgb1s9ic0gsqs5si0v9agmj90lk0bhihbovd5o5ve023g4ocko builtin.metadata.isTest : IsTest - 710. -- ##MutableArray + 726. -- ##MutableArray builtin type builtin.MutableArray - 711. -- ##MutableArray.copyTo! + 727. -- ##MutableArray.copyTo! builtin.MutableArray.copyTo! : MutableArray g a -> Nat -> MutableArray g a @@ -2593,34 +2670,34 @@ This transcript is intended to make visible accidental changes to the hashing al -> Nat ->{g, Exception} () - 712. -- ##MutableArray.freeze + 728. -- ##MutableArray.freeze builtin.MutableArray.freeze : MutableArray g a -> Nat -> Nat ->{g} ImmutableArray a - 713. -- ##MutableArray.freeze! + 729. -- ##MutableArray.freeze! builtin.MutableArray.freeze! : MutableArray g a ->{g} ImmutableArray a - 714. -- ##MutableArray.read + 730. -- ##MutableArray.read builtin.MutableArray.read : MutableArray g a -> Nat ->{g, Exception} a - 715. -- ##MutableArray.size + 731. -- ##MutableArray.size builtin.MutableArray.size : MutableArray g a -> Nat - 716. -- ##MutableArray.write + 732. -- ##MutableArray.write builtin.MutableArray.write : MutableArray g a -> Nat -> a ->{g, Exception} () - 717. -- ##MutableByteArray + 733. -- ##MutableByteArray builtin type builtin.MutableByteArray - 718. -- ##MutableByteArray.copyTo! + 734. -- ##MutableByteArray.copyTo! builtin.MutableByteArray.copyTo! : MutableByteArray g -> Nat -> MutableByteArray g @@ -2628,913 +2705,961 @@ This transcript is intended to make visible accidental changes to the hashing al -> Nat ->{g, Exception} () - 719. -- ##MutableByteArray.freeze + 735. -- ##MutableByteArray.freeze builtin.MutableByteArray.freeze : MutableByteArray g -> Nat -> Nat ->{g} ImmutableByteArray - 720. -- ##MutableByteArray.freeze! + 736. -- ##MutableByteArray.freeze! builtin.MutableByteArray.freeze! : MutableByteArray g ->{g} ImmutableByteArray - 721. -- ##MutableByteArray.read16be + 737. -- ##MutableByteArray.read16be builtin.MutableByteArray.read16be : MutableByteArray g -> Nat ->{g, Exception} Nat - 722. -- ##MutableByteArray.read16le + 738. -- ##MutableByteArray.read16le builtin.MutableByteArray.read16le : MutableByteArray g -> Nat ->{g, Exception} Nat - 723. -- ##MutableByteArray.read24be + 739. -- ##MutableByteArray.read24be builtin.MutableByteArray.read24be : MutableByteArray g -> Nat ->{g, Exception} Nat - 724. -- ##MutableByteArray.read24le + 740. -- ##MutableByteArray.read24le builtin.MutableByteArray.read24le : MutableByteArray g -> Nat ->{g, Exception} Nat - 725. -- ##MutableByteArray.read32be + 741. -- ##MutableByteArray.read32be builtin.MutableByteArray.read32be : MutableByteArray g -> Nat ->{g, Exception} Nat - 726. -- ##MutableByteArray.read32le + 742. -- ##MutableByteArray.read32le builtin.MutableByteArray.read32le : MutableByteArray g -> Nat ->{g, Exception} Nat - 727. -- ##MutableByteArray.read40be + 743. -- ##MutableByteArray.read40be builtin.MutableByteArray.read40be : MutableByteArray g -> Nat ->{g, Exception} Nat - 728. -- ##MutableByteArray.read40le + 744. -- ##MutableByteArray.read40le builtin.MutableByteArray.read40le : MutableByteArray g -> Nat ->{g, Exception} Nat - 729. -- ##MutableByteArray.read64be + 745. -- ##MutableByteArray.read64be builtin.MutableByteArray.read64be : MutableByteArray g -> Nat ->{g, Exception} Nat - 730. -- ##MutableByteArray.read64le + 746. -- ##MutableByteArray.read64le builtin.MutableByteArray.read64le : MutableByteArray g -> Nat ->{g, Exception} Nat - 731. -- ##MutableByteArray.read8 + 747. -- ##MutableByteArray.read8 builtin.MutableByteArray.read8 : MutableByteArray g -> Nat ->{g, Exception} Nat - 732. -- ##MutableByteArray.size + 748. -- ##MutableByteArray.size builtin.MutableByteArray.size : MutableByteArray g -> Nat - 733. -- ##MutableByteArray.write16be + 749. -- ##MutableByteArray.write16be builtin.MutableByteArray.write16be : MutableByteArray g -> Nat -> Nat ->{g, Exception} () - 734. -- ##MutableByteArray.write16le + 750. -- ##MutableByteArray.write16le builtin.MutableByteArray.write16le : MutableByteArray g -> Nat -> Nat ->{g, Exception} () - 735. -- ##MutableByteArray.write32be + 751. -- ##MutableByteArray.write32be builtin.MutableByteArray.write32be : MutableByteArray g -> Nat -> Nat ->{g, Exception} () - 736. -- ##MutableByteArray.write32le + 752. -- ##MutableByteArray.write32le builtin.MutableByteArray.write32le : MutableByteArray g -> Nat -> Nat ->{g, Exception} () - 737. -- ##MutableByteArray.write64be + 753. -- ##MutableByteArray.write64be builtin.MutableByteArray.write64be : MutableByteArray g -> Nat -> Nat ->{g, Exception} () - 738. -- ##MutableByteArray.write64le + 754. -- ##MutableByteArray.write64le builtin.MutableByteArray.write64le : MutableByteArray g -> Nat -> Nat ->{g, Exception} () - 739. -- ##MutableByteArray.write8 + 755. -- ##MutableByteArray.write8 builtin.MutableByteArray.write8 : MutableByteArray g -> Nat -> Nat ->{g, Exception} () - 740. -- ##Nat + 756. -- ##Nat builtin type builtin.Nat - 741. -- ##Nat.* + 757. -- ##Nat.* builtin.Nat.* : Nat -> Nat -> Nat - 742. -- ##Nat.+ + 758. -- ##Nat.+ builtin.Nat.+ : Nat -> Nat -> Nat - 743. -- ##Nat./ + 759. -- ##Nat./ builtin.Nat./ : Nat -> Nat -> Nat - 744. -- ##Nat.and + 760. -- ##Nat.and builtin.Nat.and : Nat -> Nat -> Nat - 745. -- ##Nat.complement + 761. -- ##Nat.complement builtin.Nat.complement : Nat -> Nat - 746. -- ##Nat.drop + 762. -- ##Nat.drop builtin.Nat.drop : Nat -> Nat -> Nat - 747. -- ##Nat.== + 763. -- ##Nat.== builtin.Nat.eq : Nat -> Nat -> Boolean - 748. -- ##Nat.fromText + 764. -- ##Nat.fromText builtin.Nat.fromText : Text -> Optional Nat - 749. -- ##Nat.> + 765. -- ##Nat.> builtin.Nat.gt : Nat -> Nat -> Boolean - 750. -- ##Nat.>= + 766. -- ##Nat.>= builtin.Nat.gteq : Nat -> Nat -> Boolean - 751. -- ##Nat.increment + 767. -- ##Nat.increment builtin.Nat.increment : Nat -> Nat - 752. -- ##Nat.isEven + 768. -- ##Nat.isEven builtin.Nat.isEven : Nat -> Boolean - 753. -- ##Nat.isOdd + 769. -- ##Nat.isOdd builtin.Nat.isOdd : Nat -> Boolean - 754. -- ##Nat.leadingZeros + 770. -- ##Nat.leadingZeros builtin.Nat.leadingZeros : Nat -> Nat - 755. -- ##Nat.< + 771. -- ##Nat.< builtin.Nat.lt : Nat -> Nat -> Boolean - 756. -- ##Nat.<= + 772. -- ##Nat.<= builtin.Nat.lteq : Nat -> Nat -> Boolean - 757. -- ##Nat.mod + 773. -- ##Nat.mod builtin.Nat.mod : Nat -> Nat -> Nat - 758. -- ##Nat.or + 774. -- ##Nat.or builtin.Nat.or : Nat -> Nat -> Nat - 759. -- ##Nat.popCount + 775. -- ##Nat.popCount builtin.Nat.popCount : Nat -> Nat - 760. -- ##Nat.pow + 776. -- ##Nat.pow builtin.Nat.pow : Nat -> Nat -> Nat - 761. -- ##Nat.shiftLeft + 777. -- ##Nat.shiftLeft builtin.Nat.shiftLeft : Nat -> Nat -> Nat - 762. -- ##Nat.shiftRight + 778. -- ##Nat.shiftRight builtin.Nat.shiftRight : Nat -> Nat -> Nat - 763. -- ##Nat.sub + 779. -- ##Nat.sub builtin.Nat.sub : Nat -> Nat -> Int - 764. -- ##Nat.toFloat + 780. -- ##Nat.toFloat builtin.Nat.toFloat : Nat -> Float - 765. -- ##Nat.toInt + 781. -- ##Nat.toInt builtin.Nat.toInt : Nat -> Int - 766. -- ##Nat.toText + 782. -- ##Nat.toText builtin.Nat.toText : Nat -> Text - 767. -- ##Nat.trailingZeros + 783. -- ##Nat.trailingZeros builtin.Nat.trailingZeros : Nat -> Nat - 768. -- ##Nat.xor + 784. -- ##Nat.xor builtin.Nat.xor : Nat -> Nat -> Nat - 769. -- ##Natural + 785. -- ##Natural builtin type builtin.Natural - 770. -- ##Natural.add + 786. -- ##Natural.add builtin.Natural.add : Natural -> Natural -> Natural - 771. -- ##Natural.and + 787. -- ##Natural.and builtin.Natural.and : Natural -> Natural -> Natural - 772. -- ##Natural.div + 788. -- ##Natural.div builtin.Natural.div : Natural -> Natural -> Natural - 773. -- ##Natural.eq + 789. -- ##Natural.eq builtin.Natural.eq : Natural -> Natural -> Boolean - 774. -- ##Natural.fromNat + 790. -- ##Natural.fromNat builtin.Natural.fromNat : Nat -> Natural - 775. -- ##Natural.fromText + 791. -- ##Natural.fromText builtin.Natural.fromText : Text -> Optional Natural - 776. -- ##Natural.gt + 792. -- ##Natural.gt builtin.Natural.gt : Natural -> Natural -> Boolean - 777. -- ##Natural.gteq + 793. -- ##Natural.gteq builtin.Natural.gteq : Natural -> Natural -> Boolean - 778. -- ##Natural.isEven + 794. -- ##Natural.isEven builtin.Natural.isEven : Natural -> Boolean - 779. -- ##Natural.isOdd + 795. -- ##Natural.isOdd builtin.Natural.isOdd : Natural -> Boolean - 780. -- ##Natural.lt + 796. -- ##Natural.lt builtin.Natural.lt : Natural -> Natural -> Boolean - 781. -- ##Natural.lteq + 797. -- ##Natural.lteq builtin.Natural.lteq : Natural -> Natural -> Boolean - 782. -- ##Natural.mod + 798. -- ##Natural.mod builtin.Natural.mod : Natural -> Natural -> Natural - 783. -- ##Natural.mul + 799. -- ##Natural.mul builtin.Natural.mul : Natural -> Natural -> Natural - 784. -- ##Natural.not + 800. -- ##Natural.not builtin.Natural.not : Natural -> Natural - 785. -- ##Natural.or + 801. -- ##Natural.or builtin.Natural.or : Natural -> Natural -> Natural - 786. -- ##Natural.popCount + 802. -- ##Natural.popCount builtin.Natural.popCount : Natural -> Nat - 787. -- ##Natural.pow + 803. -- ##Natural.pow builtin.Natural.pow : Natural -> Natural -> Natural - 788. -- ##Natural.shiftLeft + 804. -- ##Natural.shiftLeft builtin.Natural.shiftLeft : Natural -> Nat -> Natural - 789. -- ##Natural.shiftRight + 805. -- ##Natural.shiftRight builtin.Natural.shiftRight : Natural -> Nat -> Natural - 790. -- ##Natural.sub + 806. -- ##Natural.sub builtin.Natural.sub : Natural -> Natural -> Natural - 791. -- ##Natural.toFloat + 807. -- ##Natural.toFloat builtin.Natural.toFloat : Natural -> Float - 792. -- ##Natural.toNat + 808. -- ##Natural.toNat builtin.Natural.toNat : Natural -> Nat - 793. -- ##Natural.toText + 809. -- ##Natural.toText builtin.Natural.toText : Natural -> Text - 794. -- ##Natural.unsafeFromText + 810. -- ##Natural.unsafeFromText builtin.Natural.unsafeFromText : Text -> Natural - 795. -- ##Natural.xor + 811. -- ##Natural.xor builtin.Natural.xor : Natural -> Natural -> Natural - 796. -- #nirp5os0q69o4e1u9p3t6mmq6l6otluefi3ksm7dhm0diidjvkkgl8o9bvnflbj0sanuvdusf34f1qrins3ktcaglpcqv9oums2slsg + 812. -- #nirp5os0q69o4e1u9p3t6mmq6l6otluefi3ksm7dhm0diidjvkkgl8o9bvnflbj0sanuvdusf34f1qrins3ktcaglpcqv9oums2slsg structural type builtin.Optional a - 797. -- #nirp5os0q69o4e1u9p3t6mmq6l6otluefi3ksm7dhm0diidjvkkgl8o9bvnflbj0sanuvdusf34f1qrins3ktcaglpcqv9oums2slsg#1 + 813. -- #nirp5os0q69o4e1u9p3t6mmq6l6otluefi3ksm7dhm0diidjvkkgl8o9bvnflbj0sanuvdusf34f1qrins3ktcaglpcqv9oums2slsg#1 builtin.Optional.None : Optional a - 798. -- #nirp5os0q69o4e1u9p3t6mmq6l6otluefi3ksm7dhm0diidjvkkgl8o9bvnflbj0sanuvdusf34f1qrins3ktcaglpcqv9oums2slsg#0 + 814. -- #nirp5os0q69o4e1u9p3t6mmq6l6otluefi3ksm7dhm0diidjvkkgl8o9bvnflbj0sanuvdusf34f1qrins3ktcaglpcqv9oums2slsg#0 builtin.Optional.Some : a -> Optional a - 799. -- ##Pattern + 815. -- ##Pattern builtin type builtin.Pattern - 800. -- ##Pattern.capture + 816. -- ##Pattern.capture builtin.Pattern.capture : Pattern a -> Pattern a - 801. -- ##Pattern.captureAs + 817. -- ##Pattern.captureAs builtin.Pattern.captureAs : a -> Pattern a -> Pattern a - 802. -- ##Pattern.isMatch + 818. -- ##Pattern.isMatch builtin.Pattern.isMatch : Pattern a -> a -> Boolean - 803. -- ##Pattern.join + 819. -- ##Pattern.join builtin.Pattern.join : [Pattern a] -> Pattern a - 804. -- ##Pattern.lookahead + 820. -- ##Pattern.lookahead builtin.Pattern.lookahead : Pattern a -> Pattern a - 805. -- ##Pattern.many + 821. -- ##Pattern.many builtin.Pattern.many : Pattern a -> Pattern a - 806. -- ##Pattern.many.corrected + 822. -- ##Pattern.many.corrected builtin.Pattern.many.corrected : Pattern a -> Pattern a - 807. -- ##Pattern.negativeLookahead + 823. -- ##Pattern.negativeLookahead builtin.Pattern.negativeLookahead : Pattern a -> Pattern a - 808. -- ##Pattern.or + 824. -- ##Pattern.or builtin.Pattern.or : Pattern a -> Pattern a -> Pattern a - 809. -- ##Pattern.replicate + 825. -- ##Pattern.replicate builtin.Pattern.replicate : Nat -> Nat -> Pattern a -> Pattern a - 810. -- ##Pattern.run + 826. -- ##Pattern.run builtin.Pattern.run : Pattern a -> a -> Optional ([a], a) - 811. -- ##PinnedByteArray + 827. -- ##PinnedByteArray builtin type builtin.PinnedByteArray - 812. -- ##PinnedByteArray.cast + 828. -- ##PinnedByteArray.cast builtin.PinnedByteArray.cast : PinnedByteArray g -> MutableByteArray g - 813. -- #cbo8de57n17pgc5iic1741jeiunhvhfcfd7gt79vd6516u64aplasdodqoouejbgovhge2le5jb6rje923fcrllhtu01t29cdrssgbg + 829. -- #cbo8de57n17pgc5iic1741jeiunhvhfcfd7gt79vd6516u64aplasdodqoouejbgovhge2le5jb6rje923fcrllhtu01t29cdrssgbg structural type builtin.Pretty txt - 814. -- #fqfaur9v9v4fks5d0c74ouitpjp121c3fbu2l9t05km8otjcj43gk453vu668pg54rte6qmh4v3uao6vbfpntrtaq057jgni1jk8fj8 + 830. -- #fqfaur9v9v4fks5d0c74ouitpjp121c3fbu2l9t05km8otjcj43gk453vu668pg54rte6qmh4v3uao6vbfpntrtaq057jgni1jk8fj8 type builtin.Pretty.Annotated w txt - 815. -- #fqfaur9v9v4fks5d0c74ouitpjp121c3fbu2l9t05km8otjcj43gk453vu668pg54rte6qmh4v3uao6vbfpntrtaq057jgni1jk8fj8#1 + 831. -- #fqfaur9v9v4fks5d0c74ouitpjp121c3fbu2l9t05km8otjcj43gk453vu668pg54rte6qmh4v3uao6vbfpntrtaq057jgni1jk8fj8#1 builtin.Pretty.Annotated.Append : w -> [Annotated w txt] -> Annotated w txt - 816. -- #fqfaur9v9v4fks5d0c74ouitpjp121c3fbu2l9t05km8otjcj43gk453vu668pg54rte6qmh4v3uao6vbfpntrtaq057jgni1jk8fj8#6 + 832. -- #fqfaur9v9v4fks5d0c74ouitpjp121c3fbu2l9t05km8otjcj43gk453vu668pg54rte6qmh4v3uao6vbfpntrtaq057jgni1jk8fj8#6 builtin.Pretty.Annotated.Empty : Annotated w txt - 817. -- #fqfaur9v9v4fks5d0c74ouitpjp121c3fbu2l9t05km8otjcj43gk453vu668pg54rte6qmh4v3uao6vbfpntrtaq057jgni1jk8fj8#4 + 833. -- #fqfaur9v9v4fks5d0c74ouitpjp121c3fbu2l9t05km8otjcj43gk453vu668pg54rte6qmh4v3uao6vbfpntrtaq057jgni1jk8fj8#4 builtin.Pretty.Annotated.Group : w -> Annotated w txt -> Annotated w txt - 818. -- #fqfaur9v9v4fks5d0c74ouitpjp121c3fbu2l9t05km8otjcj43gk453vu668pg54rte6qmh4v3uao6vbfpntrtaq057jgni1jk8fj8#3 + 834. -- #fqfaur9v9v4fks5d0c74ouitpjp121c3fbu2l9t05km8otjcj43gk453vu668pg54rte6qmh4v3uao6vbfpntrtaq057jgni1jk8fj8#3 builtin.Pretty.Annotated.Indent : w -> Annotated w txt -> Annotated w txt -> Annotated w txt -> Annotated w txt - 819. -- #fqfaur9v9v4fks5d0c74ouitpjp121c3fbu2l9t05km8otjcj43gk453vu668pg54rte6qmh4v3uao6vbfpntrtaq057jgni1jk8fj8#7 + 835. -- #fqfaur9v9v4fks5d0c74ouitpjp121c3fbu2l9t05km8otjcj43gk453vu668pg54rte6qmh4v3uao6vbfpntrtaq057jgni1jk8fj8#7 builtin.Pretty.Annotated.Lit : w -> txt -> Annotated w txt - 820. -- #fqfaur9v9v4fks5d0c74ouitpjp121c3fbu2l9t05km8otjcj43gk453vu668pg54rte6qmh4v3uao6vbfpntrtaq057jgni1jk8fj8#2 + 836. -- #fqfaur9v9v4fks5d0c74ouitpjp121c3fbu2l9t05km8otjcj43gk453vu668pg54rte6qmh4v3uao6vbfpntrtaq057jgni1jk8fj8#2 builtin.Pretty.Annotated.OrElse : w -> Annotated w txt -> Annotated w txt -> Annotated w txt - 821. -- #fqfaur9v9v4fks5d0c74ouitpjp121c3fbu2l9t05km8otjcj43gk453vu668pg54rte6qmh4v3uao6vbfpntrtaq057jgni1jk8fj8#0 + 837. -- #fqfaur9v9v4fks5d0c74ouitpjp121c3fbu2l9t05km8otjcj43gk453vu668pg54rte6qmh4v3uao6vbfpntrtaq057jgni1jk8fj8#0 builtin.Pretty.Annotated.Table : w -> [[Annotated w txt]] -> Annotated w txt - 822. -- #fqfaur9v9v4fks5d0c74ouitpjp121c3fbu2l9t05km8otjcj43gk453vu668pg54rte6qmh4v3uao6vbfpntrtaq057jgni1jk8fj8#5 + 838. -- #fqfaur9v9v4fks5d0c74ouitpjp121c3fbu2l9t05km8otjcj43gk453vu668pg54rte6qmh4v3uao6vbfpntrtaq057jgni1jk8fj8#5 builtin.Pretty.Annotated.Wrap : w -> Annotated w txt -> Annotated w txt - 823. -- #loh4epguhqj73ut43b287p1272ko7ackkr544k9scurlsf6m6smpifp5ghdcscvqdofpf79req1pl4e7qni0hvo4m0gsi3f1jhn9nvo + 839. -- #loh4epguhqj73ut43b287p1272ko7ackkr544k9scurlsf6m6smpifp5ghdcscvqdofpf79req1pl4e7qni0hvo4m0gsi3f1jhn9nvo builtin.Pretty.append : Pretty txt -> Pretty txt -> Pretty txt - 824. -- #sonptakf85a3uklev4rq0pub00k56jdpaop4tcd9bmk0gmjjij5t16sf1knspku2hbp0uikiflbo0dtjv1i6r3t2rpjh86vo1rlaer8 + 840. -- #sonptakf85a3uklev4rq0pub00k56jdpaop4tcd9bmk0gmjjij5t16sf1knspku2hbp0uikiflbo0dtjv1i6r3t2rpjh86vo1rlaer8 builtin.Pretty.empty : Pretty txt - 825. -- #mlpplm1bhqkcif5j09204uuvfll7qte95msb0skjfd30nmei005kiich1ao39gm2j8687s14qvf5llu6i1a6fvt4vdmbp99jlfundfo + 841. -- #mlpplm1bhqkcif5j09204uuvfll7qte95msb0skjfd30nmei005kiich1ao39gm2j8687s14qvf5llu6i1a6fvt4vdmbp99jlfundfo builtin.Pretty.get : Pretty txt -> Annotated () txt - 826. -- #303bqopo0ditms2abmf35ikbgbb7gkcmqcd5g5eie85lvvmkpd89mi8v0etgm2508bejlgj9e7ffvpufj3v94mlks3ugvr3sjkbttq0 + 842. -- #303bqopo0ditms2abmf35ikbgbb7gkcmqcd5g5eie85lvvmkpd89mi8v0etgm2508bejlgj9e7ffvpufj3v94mlks3ugvr3sjkbttq0 builtin.Pretty.group : Pretty txt -> Pretty txt - 827. -- #o5dik2fg10998uep20m3du4iqqjbtap0apq4452g9emve8g3m655392u97iunphh90opvg92riaabbjsofc02bhr0qkcousvqgg2a78 + 843. -- #o5dik2fg10998uep20m3du4iqqjbtap0apq4452g9emve8g3m655392u97iunphh90opvg92riaabbjsofc02bhr0qkcousvqgg2a78 builtin.Pretty.indent : Pretty txt -> Pretty txt -> Pretty txt - 828. -- #evbq94p3dn4l8ugge1o2f8dk072gcfho082lm7j02ejjsnctb5inkfsasuplmu8a529jh4v0h6v8ti7koff23e58cceda0nlh98m530 + 844. -- #evbq94p3dn4l8ugge1o2f8dk072gcfho082lm7j02ejjsnctb5inkfsasuplmu8a529jh4v0h6v8ti7koff23e58cceda0nlh98m530 builtin.Pretty.indent' : Pretty txt -> Pretty txt -> Pretty txt -> Pretty txt - 829. -- #u5s76jh01asd7hbqaq466dp48v217o7tclphuk7gepc99vbv0fbfv5j2uq8o3n7lsvpiri5925o02j22a6tq7koc9t8tbcps4naetbg + 845. -- #u5s76jh01asd7hbqaq466dp48v217o7tclphuk7gepc99vbv0fbfv5j2uq8o3n7lsvpiri5925o02j22a6tq7koc9t8tbcps4naetbg builtin.Pretty.join : [Pretty txt] -> Pretty txt - 830. -- #uoti2ppnfp1l11obl8tto1m2h4r6n1i14cc3i45bjpjrhogh52cuoch1n6b1q0n3jf6blr9585stb1i155jjq17b4c2hvd4d3abmrpo + 846. -- #uoti2ppnfp1l11obl8tto1m2h4r6n1i14cc3i45bjpjrhogh52cuoch1n6b1q0n3jf6blr9585stb1i155jjq17b4c2hvd4d3abmrpo builtin.Pretty.lit : txt -> Pretty txt - 831. -- #mabh3q4gsoiao223a03t7voj937b3sefb7e1j5r33su5o5tqrkmenl2aeboq909vs3bh2snltuqrfcsd3liic1vma0f976h1eo63upg + 847. -- #mabh3q4gsoiao223a03t7voj937b3sefb7e1j5r33su5o5tqrkmenl2aeboq909vs3bh2snltuqrfcsd3liic1vma0f976h1eo63upg builtin.Pretty.map : (txt ->{g} txt2) -> Pretty txt ->{g} Pretty txt2 - 832. -- #i260pi6le5cdptpo78mbbi4r6qfc76kvb1g9r9d210b1altjtmoqi8b6psu3ag5hb8gq7crhgei406arn999c1dfrqt67j8vnls4gg8 + 848. -- #i260pi6le5cdptpo78mbbi4r6qfc76kvb1g9r9d210b1altjtmoqi8b6psu3ag5hb8gq7crhgei406arn999c1dfrqt67j8vnls4gg8 builtin.Pretty.orElse : Pretty txt -> Pretty txt -> Pretty txt - 833. -- #cbo8de57n17pgc5iic1741jeiunhvhfcfd7gt79vd6516u64aplasdodqoouejbgovhge2le5jb6rje923fcrllhtu01t29cdrssgbg#0 + 849. -- #cbo8de57n17pgc5iic1741jeiunhvhfcfd7gt79vd6516u64aplasdodqoouejbgovhge2le5jb6rje923fcrllhtu01t29cdrssgbg#0 builtin.Pretty.Pretty : Annotated () txt -> Pretty txt - 834. -- #bvuv0d49kosa6op5j54ln2h3vbs3209e4fjtb3kehvn76p92l8682qnp2r5e9t7sflnv3dfb0uf9p0f76qbobn562oqdusi9mo3ubjo + 850. -- #bvuv0d49kosa6op5j54ln2h3vbs3209e4fjtb3kehvn76p92l8682qnp2r5e9t7sflnv3dfb0uf9p0f76qbobn562oqdusi9mo3ubjo builtin.Pretty.sepBy : Pretty txt -> [Pretty txt] -> Pretty txt - 835. -- #rm3moq6nqvk1rs49lsshdtheqo72qv2fg1fqkk5m8tbqppik498otkrq6ppu7fu9p1kddldmpv0dig7bn82n0tj0ngnbu83fpb11upg + 851. -- #rm3moq6nqvk1rs49lsshdtheqo72qv2fg1fqkk5m8tbqppik498otkrq6ppu7fu9p1kddldmpv0dig7bn82n0tj0ngnbu83fpb11upg builtin.Pretty.table : [[Pretty txt]] -> Pretty txt - 836. -- #n01tnlfatb0lo6s762cfofhtdavui9j8ovljacdbn9bvrfoeimd0pkner0694d3lb1f4qa5gur4975lvopftk7jkrflmhjv6gbsifbo + 852. -- #n01tnlfatb0lo6s762cfofhtdavui9j8ovljacdbn9bvrfoeimd0pkner0694d3lb1f4qa5gur4975lvopftk7jkrflmhjv6gbsifbo builtin.Pretty.wrap : Pretty txt -> Pretty txt - 837. -- ##Ref + 853. -- ##Ref builtin type builtin.Ref - 838. -- ##Ref.read + 854. -- ##Ref.read builtin.Ref.read : Ref g a ->{g} a - 839. -- ##Ref.write + 855. -- ##Ref.write builtin.Ref.write : Ref g a -> a ->{g} () - 840. -- ##Effect + 856. -- ##Effect builtin type builtin.Request - 841. -- #bga77hj5p43epjosu36iero5ulpm7hqrct1slj5ivdcajsr52ksjam8d5smq2965netv9t43o3g0amgva26qoatt4qth29khkuds2t0 + 857. -- #bga77hj5p43epjosu36iero5ulpm7hqrct1slj5ivdcajsr52ksjam8d5smq2965netv9t43o3g0amgva26qoatt4qth29khkuds2t0 type builtin.RewriteCase a b - 842. -- #bga77hj5p43epjosu36iero5ulpm7hqrct1slj5ivdcajsr52ksjam8d5smq2965netv9t43o3g0amgva26qoatt4qth29khkuds2t0#0 + 858. -- #bga77hj5p43epjosu36iero5ulpm7hqrct1slj5ivdcajsr52ksjam8d5smq2965netv9t43o3g0amgva26qoatt4qth29khkuds2t0#0 builtin.RewriteCase.RewriteCase : a -> b -> RewriteCase a b - 843. -- #qcot4bpj2skgnui8hoignn6fl2gnn2nfrur451ft2egd5n1ndu6ti4uu7r1mvtc8r4p7iielfijk2mb7md9tt2m2rdvaikah4oluf7o + 859. -- #qcot4bpj2skgnui8hoignn6fl2gnn2nfrur451ft2egd5n1ndu6ti4uu7r1mvtc8r4p7iielfijk2mb7md9tt2m2rdvaikah4oluf7o type builtin.Rewrites a - 844. -- #qcot4bpj2skgnui8hoignn6fl2gnn2nfrur451ft2egd5n1ndu6ti4uu7r1mvtc8r4p7iielfijk2mb7md9tt2m2rdvaikah4oluf7o#0 + 860. -- #qcot4bpj2skgnui8hoignn6fl2gnn2nfrur451ft2egd5n1ndu6ti4uu7r1mvtc8r4p7iielfijk2mb7md9tt2m2rdvaikah4oluf7o#0 builtin.Rewrites.Rewrites : a -> Rewrites a - 845. -- #nu6eab37fl81lb5hfcainu83hph0ksqjsjgjbqvc3t8o13djtt5511qfa6tuggc5c3re06c5p6eto5o2cqme0jdlo31nnd13npqigjo + 861. -- #nu6eab37fl81lb5hfcainu83hph0ksqjsjgjbqvc3t8o13djtt5511qfa6tuggc5c3re06c5p6eto5o2cqme0jdlo31nnd13npqigjo type builtin.RewriteSignature a b - 846. -- #nu6eab37fl81lb5hfcainu83hph0ksqjsjgjbqvc3t8o13djtt5511qfa6tuggc5c3re06c5p6eto5o2cqme0jdlo31nnd13npqigjo#0 + 862. -- #nu6eab37fl81lb5hfcainu83hph0ksqjsjgjbqvc3t8o13djtt5511qfa6tuggc5c3re06c5p6eto5o2cqme0jdlo31nnd13npqigjo#0 builtin.RewriteSignature.RewriteSignature : (a -> b -> ()) -> RewriteSignature a b - 847. -- #bvffhraos4oatd3qmedt676dqul9c1oj8r4cqns36lsrue84kl0ote15iqbbmgu8joek3gce1h2raqas5b9nnvs2d79l9mrpmmi2sf0 + 863. -- #bvffhraos4oatd3qmedt676dqul9c1oj8r4cqns36lsrue84kl0ote15iqbbmgu8joek3gce1h2raqas5b9nnvs2d79l9mrpmmi2sf0 type builtin.RewriteTerm a b - 848. -- #bvffhraos4oatd3qmedt676dqul9c1oj8r4cqns36lsrue84kl0ote15iqbbmgu8joek3gce1h2raqas5b9nnvs2d79l9mrpmmi2sf0#0 + 864. -- #bvffhraos4oatd3qmedt676dqul9c1oj8r4cqns36lsrue84kl0ote15iqbbmgu8joek3gce1h2raqas5b9nnvs2d79l9mrpmmi2sf0#0 builtin.RewriteTerm.RewriteTerm : a -> b -> RewriteTerm a b - 849. -- ##Scope + 865. -- ##Scope builtin type builtin.Scope - 850. -- ##Scope.array + 866. -- ##Scope.array builtin.Scope.array : Nat ->{Scope s} MutableArray (Scope s) a - 851. -- ##Scope.arrayOf + 867. -- ##Scope.arrayOf builtin.Scope.arrayOf : a -> Nat ->{Scope s} MutableArray (Scope s) a - 852. -- ##Scope.bytearray + 868. -- ##Scope.bytearray builtin.Scope.bytearray : Nat ->{Scope s} MutableByteArray (Scope s) - 853. -- ##Scope.bytearrayOf + 869. -- ##Scope.bytearrayOf builtin.Scope.bytearrayOf : Nat -> Nat ->{Scope s} MutableByteArray (Scope s) - 854. -- ##Scope.pinnedByteArray + 870. -- ##Scope.pinnedByteArray builtin.Scope.pinnedByteArray : Nat ->{Scope s} PinnedByteArray (Scope s) - 855. -- ##Scope.pinnedByteArrayOf + 871. -- ##Scope.pinnedByteArrayOf builtin.Scope.pinnedByteArrayOf : Nat -> Nat ->{Scope s} PinnedByteArray (Scope s) - 856. -- ##Scope.ref + 872. -- ##Scope.ref builtin.Scope.ref : a ->{Scope s} Ref {Scope s} a - 857. -- ##Scope.run + 873. -- ##Scope.run builtin.Scope.run : (∀ s. '{g, Scope s} r) ->{g} r - 858. -- #6uigas14aqgd889s036hq9ssrlo22pju41009m0rktetcrbm97qniljjc1rv1u661r4f63oq6pupoevghs8a2hupvlbi6qi4ntn9320 + 874. -- #6uigas14aqgd889s036hq9ssrlo22pju41009m0rktetcrbm97qniljjc1rv1u661r4f63oq6pupoevghs8a2hupvlbi6qi4ntn9320 structural type builtin.SeqView a b - 859. -- #6uigas14aqgd889s036hq9ssrlo22pju41009m0rktetcrbm97qniljjc1rv1u661r4f63oq6pupoevghs8a2hupvlbi6qi4ntn9320#0 + 875. -- #6uigas14aqgd889s036hq9ssrlo22pju41009m0rktetcrbm97qniljjc1rv1u661r4f63oq6pupoevghs8a2hupvlbi6qi4ntn9320#0 builtin.SeqView.VElem : a -> b -> SeqView a b - 860. -- #6uigas14aqgd889s036hq9ssrlo22pju41009m0rktetcrbm97qniljjc1rv1u661r4f63oq6pupoevghs8a2hupvlbi6qi4ntn9320#1 + 876. -- #6uigas14aqgd889s036hq9ssrlo22pju41009m0rktetcrbm97qniljjc1rv1u661r4f63oq6pupoevghs8a2hupvlbi6qi4ntn9320#1 builtin.SeqView.VEmpty : SeqView a b - 861. -- #prrhin67cemaummdiu0c35cj17g8m7t96qne5i8vfj9m6ur338250jukj6q33ob0llgl9vvgc50rfgiiu7u0nvg5fvajkpqa0amjct0 + 877. -- #prrhin67cemaummdiu0c35cj17g8m7t96qne5i8vfj9m6ur338250jukj6q33ob0llgl9vvgc50rfgiiu7u0nvg5fvajkpqa0amjct0 structural type builtin.Set a - 862. -- #prrhin67cemaummdiu0c35cj17g8m7t96qne5i8vfj9m6ur338250jukj6q33ob0llgl9vvgc50rfgiiu7u0nvg5fvajkpqa0amjct0#0 + 878. -- #prrhin67cemaummdiu0c35cj17g8m7t96qne5i8vfj9m6ur338250jukj6q33ob0llgl9vvgc50rfgiiu7u0nvg5fvajkpqa0amjct0#0 builtin.Set.Set : Map a () -> Set a - 863. -- ##Socket.toText + 879. -- ##Socket.toText builtin.Socket.toText : Socket -> Text - 864. -- #pfp0ajb4v2mb9tspp29v53dkacb76aa1t5kbk1dl0q354cjcg4egdpmvtr5d6t818ucon9eubf6r1vdvh926fgk8otvbkvbpn90levo + 880. -- #pfp0ajb4v2mb9tspp29v53dkacb76aa1t5kbk1dl0q354cjcg4egdpmvtr5d6t818ucon9eubf6r1vdvh926fgk8otvbkvbpn90levo builtin.syntax.docAside : Doc2 -> Doc2 - 865. -- #mvov9qf78ctohefjbmrgs8ussspo5juhf75pee4ikkg8asuos72unn4pjn3fdel8471soj2vaskd5ls103pb6nb8qf75sjn4igs7v48 + 881. -- #mvov9qf78ctohefjbmrgs8ussspo5juhf75pee4ikkg8asuos72unn4pjn3fdel8471soj2vaskd5ls103pb6nb8qf75sjn4igs7v48 builtin.syntax.docBlockquote : Doc2 -> Doc2 - 866. -- #cg64hg7dag89u80104kit2p40rhmo1k6h1j8obfhjolpogs705bt6hc92ct6rfj8h74m3ioug14u9pm1s7qqpmjda2srjojhi01nvf0 + 882. -- #cg64hg7dag89u80104kit2p40rhmo1k6h1j8obfhjolpogs705bt6hc92ct6rfj8h74m3ioug14u9pm1s7qqpmjda2srjojhi01nvf0 builtin.syntax.docBold : Doc2 -> Doc2 - 867. -- #3qd5kt9gjiggrb871al82n11jccedl3kb5p8ffemr703frn38tqajkett30fg7hef5orh7vl0obp3lap9qq2po3ufcnu4k3bik81rlg + 883. -- #3qd5kt9gjiggrb871al82n11jccedl3kb5p8ffemr703frn38tqajkett30fg7hef5orh7vl0obp3lap9qq2po3ufcnu4k3bik81rlg builtin.syntax.docBulletedList : [Doc2] -> Doc2 - 868. -- #el0rph43k5qg25qg20o5jdjukuful041r87v92tcb2339om0hp9u6vqtrcrfkvgj78hrpo2o1l39bbg1oier87pvgkli0lkgalgpo90 + 884. -- #el0rph43k5qg25qg20o5jdjukuful041r87v92tcb2339om0hp9u6vqtrcrfkvgj78hrpo2o1l39bbg1oier87pvgkli0lkgalgpo90 builtin.syntax.docCallout : Optional Doc2 -> Doc2 -> Doc2 - 869. -- #7jij106qpusbsbpqhmtgrk59qo8ss9e77rtrc1h9hbpnbab8sq717fe6hppmhhds9smqbv3k2q0irjgoe4mogatlp9e4k25kopt6rgo + 885. -- #7jij106qpusbsbpqhmtgrk59qo8ss9e77rtrc1h9hbpnbab8sq717fe6hppmhhds9smqbv3k2q0irjgoe4mogatlp9e4k25kopt6rgo builtin.syntax.docCode : Doc2 -> Doc2 - 870. -- #3paq4qqrk028tati33723c4aqi7ebgnjln12avbnf7eu8h8sflg0frlehb4lni4ru0pcfg9ftsurq3pb2q11cfebeki51vom697l7h0 + 886. -- #3paq4qqrk028tati33723c4aqi7ebgnjln12avbnf7eu8h8sflg0frlehb4lni4ru0pcfg9ftsurq3pb2q11cfebeki51vom697l7h0 builtin.syntax.docCodeBlock : Text -> Text -> Doc2 - 871. -- #1of955s8tqa74vu0ve863p8dn2mncc2anmms54aj084pkbdcpml6ckvs0qb4defi0df3b1e8inp29p60ac93hf2u7to0je4op9fum40 + 887. -- #1of955s8tqa74vu0ve863p8dn2mncc2anmms54aj084pkbdcpml6ckvs0qb4defi0df3b1e8inp29p60ac93hf2u7to0je4op9fum40 builtin.syntax.docColumn : [Doc2] -> Doc2 - 872. -- #ukv56cjchfao07qb08l7iimd2mmv09s5glmtljo5b71leaijtja04obd0u1hsr38itjnv85f7jvd37nr654bl4lfn4msr1one0hi4s0 + 888. -- #ukv56cjchfao07qb08l7iimd2mmv09s5glmtljo5b71leaijtja04obd0u1hsr38itjnv85f7jvd37nr654bl4lfn4msr1one0hi4s0 builtin.syntax.docEmbedAnnotation : tm -> Doc2.Term - 873. -- #uccvv8mn62ne8iqppsnpgbquqmhk4hk3n4tg7p6kttr20gov4698tu18jmmvdcs7ab455q7kklhb4uv1mtei4vbvq4qmbtbu1dbagmg + 889. -- #uccvv8mn62ne8iqppsnpgbquqmhk4hk3n4tg7p6kttr20gov4698tu18jmmvdcs7ab455q7kklhb4uv1mtei4vbvq4qmbtbu1dbagmg builtin.syntax.docEmbedAnnotations : tms -> tms - 874. -- #3r6c432d46j544g26chbfgfqrr79k7disfn41igdpe0thjar30lrjhqsuhipsr9rvg8jk6rpmnalc5iu8j842sq3svu1bo4c02og7to + 890. -- #3r6c432d46j544g26chbfgfqrr79k7disfn41igdpe0thjar30lrjhqsuhipsr9rvg8jk6rpmnalc5iu8j842sq3svu1bo4c02og7to builtin.syntax.docEmbedSignatureLink : '{g} t -> Doc2.Term - 875. -- #pjtf55viib2vgc4hp60e2bui7r8iij7kan0u6uq6d60d6d6ccpq81f9ngcrou2lob9maqsvcqsa85ev4171iml9elg5hbfaopijo6lo + 891. -- #pjtf55viib2vgc4hp60e2bui7r8iij7kan0u6uq6d60d6d6ccpq81f9ngcrou2lob9maqsvcqsa85ev4171iml9elg5hbfaopijo6lo builtin.syntax.docEmbedTermLink : '{g} t -> Either a Doc2.Term - 876. -- #7t98ois54isfkh31uefvdg4bg302s5q3sun4hfh0mqnosk4ded353jp0p2ij6b22vnvlcbipcv2jb91suh6qc33i7uqlfuto9f0r4n8 + 892. -- #7t98ois54isfkh31uefvdg4bg302s5q3sun4hfh0mqnosk4ded353jp0p2ij6b22vnvlcbipcv2jb91suh6qc33i7uqlfuto9f0r4n8 builtin.syntax.docEmbedTypeLink : typ -> Either typ b - 877. -- #ngon71rp4i6a3qd36pu015kk7d7il2i1491upfgernpm635hkjhcrm84oumfe6tvn193nb1lsrkulvvnmq5os0evm6sndlarquhe3i0 + 893. -- #ngon71rp4i6a3qd36pu015kk7d7il2i1491upfgernpm635hkjhcrm84oumfe6tvn193nb1lsrkulvvnmq5os0evm6sndlarquhe3i0 builtin.syntax.docEval : 'a -> Doc2 - 878. -- #hsmpfd41n9m02atorpvnj2gf7lcf04o51nrc8kohfddgq4vo18unk2c1ci8pfsam9f4i02babsu7urhvcek8fbfrilcusrgnaifp278 + 894. -- #hsmpfd41n9m02atorpvnj2gf7lcf04o51nrc8kohfddgq4vo18unk2c1ci8pfsam9f4i02babsu7urhvcek8fbfrilcusrgnaifp278 builtin.syntax.docEvalInline : 'a -> Doc2 - 879. -- #73m68mnahgud6dl9red3rcmd49qn80d0ptr2m1h163e1jr1fitibr2hf84o62cqs7dsqiuea578ge7en7kk290k6778lgo39btl5468 + 895. -- #73m68mnahgud6dl9red3rcmd49qn80d0ptr2m1h163e1jr1fitibr2hf84o62cqs7dsqiuea578ge7en7kk290k6778lgo39btl5468 builtin.syntax.docExample : Nat -> '{g} t -> Doc2 - 880. -- #62nif2cvq90cnds9eo95hdn6uvgqo6np4eku52ar4pnb18sfdetl9oo6cu99hbksfa0b4krlcvse5gr5uv5k5b0ukuovt75krhlp418 + 896. -- #62nif2cvq90cnds9eo95hdn6uvgqo6np4eku52ar4pnb18sfdetl9oo6cu99hbksfa0b4krlcvse5gr5uv5k5b0ukuovt75krhlp418 builtin.syntax.docExampleBlock : Nat -> '{g} t -> Doc2 - 881. -- #pomj7lft70jnnuk5job0pstih2mosva1oee4tediqbkhnm54tjqnfe6qs1mqt8os1ehg9ksgenb6veub2ngdpb1qat400vn0bj3fju0 + 897. -- #pomj7lft70jnnuk5job0pstih2mosva1oee4tediqbkhnm54tjqnfe6qs1mqt8os1ehg9ksgenb6veub2ngdpb1qat400vn0bj3fju0 builtin.syntax.docFoldedSource : [( Either Type Doc2.Term, [Doc2.Term])] -> Doc2 - 882. -- #dg44n9t54o1jkl3dtecsqh9vvs57jsvtvbfohkrtolqqgf2g7mf5el9i5jhg6qop1arms99c7s34d9h5rnrvf1fi4100lerjg3b38q8 + 898. -- #dg44n9t54o1jkl3dtecsqh9vvs57jsvtvbfohkrtolqqgf2g7mf5el9i5jhg6qop1arms99c7s34d9h5rnrvf1fi4100lerjg3b38q8 builtin.syntax.docFormatConsole : Doc2 -> Pretty (Either SpecialForm ConsoleText) - 883. -- #99qvifgs3u7nof50jbp5lhrf8cab0qiujr1tque2b7hfj56r39o8ot2fafhafuphoraddl1j142k994e22g5v2rhq98flc0954t5918 + 899. -- #99qvifgs3u7nof50jbp5lhrf8cab0qiujr1tque2b7hfj56r39o8ot2fafhafuphoraddl1j142k994e22g5v2rhq98flc0954t5918 builtin.syntax.docGroup : Doc2 -> Doc2 - 884. -- #gsratvk7mo273bqhivdv06f9rog2cj48u7ci0jp6ubt5oidf8cq0rjilimkas5801inbbsjcedh61jl40i3en1qu6r9vfe684ad6r08 + 900. -- #gsratvk7mo273bqhivdv06f9rog2cj48u7ci0jp6ubt5oidf8cq0rjilimkas5801inbbsjcedh61jl40i3en1qu6r9vfe684ad6r08 builtin.syntax.docItalic : Doc2 -> Doc2 - 885. -- #piohhscvm6lgpk6vfg91u2ndmlfv81nnkspihom77ucr4dev6s22rk2n9hp38nifh5p8vt7jfvep85vudpvlg2tt99e9s2qfjv5oau8 + 901. -- #piohhscvm6lgpk6vfg91u2ndmlfv81nnkspihom77ucr4dev6s22rk2n9hp38nifh5p8vt7jfvep85vudpvlg2tt99e9s2qfjv5oau8 builtin.syntax.docJoin : [Doc2] -> Doc2 - 886. -- #hjdqcolihf4obmnfoakl2t5hs1e39hpmpo9ijvc37fqgejog1ii7fpd4q2fe2rkm62tf81unmqlbud8uh63vaa9feaekg5a7uo3nq00 + 902. -- #hjdqcolihf4obmnfoakl2t5hs1e39hpmpo9ijvc37fqgejog1ii7fpd4q2fe2rkm62tf81unmqlbud8uh63vaa9feaekg5a7uo3nq00 builtin.syntax.docLink : Either Type Doc2.Term -> Doc2 - 887. -- #iv6urr76b0ohvr22qa6d05e7e01cd0re77g8c98cm0bqo0im345fotsevqnhk1igtutkrrqm562gtltofvku5mh0i87ru8tdf0i53bo + 903. -- #iv6urr76b0ohvr22qa6d05e7e01cd0re77g8c98cm0bqo0im345fotsevqnhk1igtutkrrqm562gtltofvku5mh0i87ru8tdf0i53bo builtin.syntax.docNamedLink : Doc2 -> Doc2 -> Doc2 - 888. -- #b5dvn0bqj3rc1rkmlep5f6cd6n3vp247hqku8lqndena5ocgcoae18iuq3985finagr919re4fvji011ved0g21i6o0je2jn8f7k1p0 + 904. -- #b5dvn0bqj3rc1rkmlep5f6cd6n3vp247hqku8lqndena5ocgcoae18iuq3985finagr919re4fvji011ved0g21i6o0je2jn8f7k1p0 builtin.syntax.docNumberedList : Nat -> [Doc2] -> Doc2 - 889. -- #fs8mho20fqj31ch5kpn8flm4geomotov7fb5ct8mtnh52ladorgp22vder3jgt1mr0u710e6s9gn4u36c9sp19vitvq1r0adtm3t1c0 + 905. -- #fs8mho20fqj31ch5kpn8flm4geomotov7fb5ct8mtnh52ladorgp22vder3jgt1mr0u710e6s9gn4u36c9sp19vitvq1r0adtm3t1c0 builtin.syntax.docParagraph : [Doc2] -> Doc2 - 890. -- #6dvkai3hc122e2h2h8c3jnijink5m20e27i640qvnt6smefpp2vna1rq4gbmulhb46tdabmkb5hsjeiuo4adtsutg4iu1vfmqhlueso + 906. -- #6dvkai3hc122e2h2h8c3jnijink5m20e27i640qvnt6smefpp2vna1rq4gbmulhb46tdabmkb5hsjeiuo4adtsutg4iu1vfmqhlueso builtin.syntax.docSection : Doc2 -> [Doc2] -> Doc2 - 891. -- #n0idf1bdrq5vgpk4pj9db5demk1es4jsnpodfoajftehvqjelsi0h5j2domdllq2peltdek4ptaqfpl4o8l6jpmqhcom9vq107ivdu0 + 907. -- #n0idf1bdrq5vgpk4pj9db5demk1es4jsnpodfoajftehvqjelsi0h5j2domdllq2peltdek4ptaqfpl4o8l6jpmqhcom9vq107ivdu0 builtin.syntax.docSignature : [Doc2.Term] -> Doc2 - 892. -- #git1povkck9jrptdmmpqrv1g17ptbq9hr17l52l8477ijk4cia24tr7cj36v1o22mvtk00qoo5jt4bs4e79sl3eh6is8ubh8aoc1pu0 + 908. -- #git1povkck9jrptdmmpqrv1g17ptbq9hr17l52l8477ijk4cia24tr7cj36v1o22mvtk00qoo5jt4bs4e79sl3eh6is8ubh8aoc1pu0 builtin.syntax.docSignatureInline : Doc2.Term -> Doc2 - 893. -- #47agivvofl1jegbqpdg0eeed72mdj29d623e4kdei0l10mhgckif7q2pd968ggribregcknra9u43mhehr1q86n0t4vbe4eestnu9l8 + 909. -- #47agivvofl1jegbqpdg0eeed72mdj29d623e4kdei0l10mhgckif7q2pd968ggribregcknra9u43mhehr1q86n0t4vbe4eestnu9l8 builtin.syntax.docSource : [( Either Type Doc2.Term, [Doc2.Term])] -> Doc2 - 894. -- #n6uk5tc4d8ipbga8boelh51ro24paveca9fijm1nkn3tlfddqludmlppb2ps8807v2kuou1a262sa59764mdhug2va69q4sls5jli10 + 910. -- #n6uk5tc4d8ipbga8boelh51ro24paveca9fijm1nkn3tlfddqludmlppb2ps8807v2kuou1a262sa59764mdhug2va69q4sls5jli10 builtin.syntax.docSourceElement : link -> annotations -> (link, annotations) - 895. -- #nurq288b5rfp1f5keccleh51ojgcpd2rp7cane6ftquf7gidtamffb8tr1r5h6luk1nsrqomn1k4as4kcpaskjjv35rnvoous457sag + 911. -- #nurq288b5rfp1f5keccleh51ojgcpd2rp7cane6ftquf7gidtamffb8tr1r5h6luk1nsrqomn1k4as4kcpaskjjv35rnvoous457sag builtin.syntax.docStrikethrough : Doc2 -> Doc2 - 896. -- #4ns2amu2njhvb5mtdvh3v7oljjb5ammnb41us4ekpbhb337b6mo2a4q0790cmrusko7omphtfdsaust2fn49hr5acl40ef8fkb9556g + 912. -- #4ns2amu2njhvb5mtdvh3v7oljjb5ammnb41us4ekpbhb337b6mo2a4q0790cmrusko7omphtfdsaust2fn49hr5acl40ef8fkb9556g builtin.syntax.docTable : [[Doc2]] -> Doc2 - 897. -- #i77kddfr68gbjt3767a091dtnqff9beltojh93md8peo28t59c6modeccsfd2tnrtmd75fa7dn0ie21kcv4me098q91h4ftg9eau5fo + 913. -- #i77kddfr68gbjt3767a091dtnqff9beltojh93md8peo28t59c6modeccsfd2tnrtmd75fa7dn0ie21kcv4me098q91h4ftg9eau5fo builtin.syntax.docTooltip : Doc2 -> Doc2 -> Doc2 - 898. -- #r0hdacbk2orcb2ate3uhd7ht05hmfa8643slm3u63nb3jaaim533up04lgt0pq97is43v2spkqble7mtu8f63hgcc0k2tb2jhpr2b68 + 914. -- #r0hdacbk2orcb2ate3uhd7ht05hmfa8643slm3u63nb3jaaim533up04lgt0pq97is43v2spkqble7mtu8f63hgcc0k2tb2jhpr2b68 builtin.syntax.docTransclude : d -> d - 899. -- #0nptdh40ngakd2rh92bl573a7vbdjcj2kc8rai39v8bb9dfpbj90i7nob381usjsott41c3cpo2m2q095fm0k0r68e8mrda135qa1k0 + 915. -- #0nptdh40ngakd2rh92bl573a7vbdjcj2kc8rai39v8bb9dfpbj90i7nob381usjsott41c3cpo2m2q095fm0k0r68e8mrda135qa1k0 builtin.syntax.docUntitledSection : [Doc2] -> Doc2 - 900. -- #krjm78blt08v52c52l4ubsnfidcrs0h6010j2v2h9ud38mgm6jj4vuqn4okp4g75039o7u78sbg6ghforucbfdf94f8am9kvt6875jo + 916. -- #krjm78blt08v52c52l4ubsnfidcrs0h6010j2v2h9ud38mgm6jj4vuqn4okp4g75039o7u78sbg6ghforucbfdf94f8am9kvt6875jo builtin.syntax.docVerbatim : Doc2 -> Doc2 - 901. -- #c14vgd4g1tkumf4jjd9vcoos1olb3f4gbc3hketf5l8h3i0efk8igbinh6gn018tr5075uo5nv1elva6tki6ofo3pdafidrkv9m0ot0 + 917. -- #c14vgd4g1tkumf4jjd9vcoos1olb3f4gbc3hketf5l8h3i0efk8igbinh6gn018tr5075uo5nv1elva6tki6ofo3pdafidrkv9m0ot0 builtin.syntax.docWord : Text -> Doc2 - 902. -- #aql7qk3iud6vs4cvu43aimopoosgk0fnipibdkc3so13adencmibgfn0u5c01r0adei55nkl3ttsjhl8gbj7tr4gnpj63g64ftbq6s0 + 918. -- #aql7qk3iud6vs4cvu43aimopoosgk0fnipibdkc3so13adencmibgfn0u5c01r0adei55nkl3ttsjhl8gbj7tr4gnpj63g64ftbq6s0 type builtin.Test.Result - 903. -- #aql7qk3iud6vs4cvu43aimopoosgk0fnipibdkc3so13adencmibgfn0u5c01r0adei55nkl3ttsjhl8gbj7tr4gnpj63g64ftbq6s0#0 + 919. -- #aql7qk3iud6vs4cvu43aimopoosgk0fnipibdkc3so13adencmibgfn0u5c01r0adei55nkl3ttsjhl8gbj7tr4gnpj63g64ftbq6s0#0 builtin.Test.Result.Fail : Text -> Result - 904. -- #aql7qk3iud6vs4cvu43aimopoosgk0fnipibdkc3so13adencmibgfn0u5c01r0adei55nkl3ttsjhl8gbj7tr4gnpj63g64ftbq6s0#1 + 920. -- #aql7qk3iud6vs4cvu43aimopoosgk0fnipibdkc3so13adencmibgfn0u5c01r0adei55nkl3ttsjhl8gbj7tr4gnpj63g64ftbq6s0#1 builtin.Test.Result.Ok : Text -> Result - 905. -- ##Text + 921. -- ##Text builtin type builtin.Text - 906. -- ##Text.!= + 922. -- ##Text.!= builtin.Text.!= : Text -> Text -> Boolean - 907. -- ##Text.++ + 923. -- ##Text.++ builtin.Text.++ : Text -> Text -> Text - 908. -- #nv11qo7s2lqirk3qb44jkm3q3fb6i3mn72ji2c52eubh3kufrdumanblh2bnql1o24efdhmue0v21gd7d1p5ec9j6iqrmekas0183do + 924. -- #nv11qo7s2lqirk3qb44jkm3q3fb6i3mn72ji2c52eubh3kufrdumanblh2bnql1o24efdhmue0v21gd7d1p5ec9j6iqrmekas0183do builtin.Text.alignLeftWith : Nat -> Char -> Text -> Text - 909. -- #ebeq250fdoigvu89fneb4c24f8f18eotc8kocdmosn4ri9shoeeg7ofkejts6clm5c6bifce66qtr0vpfkrhuup2en3khous41hp8rg + 925. -- #ebeq250fdoigvu89fneb4c24f8f18eotc8kocdmosn4ri9shoeeg7ofkejts6clm5c6bifce66qtr0vpfkrhuup2en3khous41hp8rg builtin.Text.alignRightWith : Nat -> Char -> Text -> Text - 910. -- ##Text.drop + 926. -- ##Text.drop builtin.Text.drop : Nat -> Text -> Text - 911. -- ##Text.empty + 927. -- ##Text.empty builtin.Text.empty : Text - 912. -- ##Text.== + 928. -- ##Text.== builtin.Text.eq : Text -> Text -> Boolean - 913. -- ##Text.fromCharList + 929. -- ##Text.fromCharList builtin.Text.fromCharList : [Char] -> Text - 914. -- ##Text.fromUtf8.impl.v3 + 930. -- ##Text.fromUtf8.impl.v3 builtin.Text.fromUtf8.impl : Bytes -> Either Failure Text - 915. -- ##Text.> + 931. -- ##Text.> builtin.Text.gt : Text -> Text -> Boolean - 916. -- ##Text.>= + 932. -- ##Text.>= builtin.Text.gteq : Text -> Text -> Boolean - 917. -- ##Text.indexOf + 933. -- ##Text.indexOf builtin.Text.indexOf : Text -> Text -> Optional Nat - 918. -- ##Text.< + 934. -- ##Text.< builtin.Text.lt : Text -> Text -> Boolean - 919. -- ##Text.<= + 935. -- ##Text.<= builtin.Text.lteq : Text -> Text -> Boolean - 920. -- ##Text.patterns.anyChar + 936. -- ##Text.patterns.anyChar builtin.Text.patterns.anyChar : Pattern Text - 921. -- ##Text.patterns.char + 937. -- ##Text.patterns.char builtin.Text.patterns.char : Class -> Pattern Text - 922. -- ##Text.patterns.charIn + 938. -- ##Text.patterns.charIn builtin.Text.patterns.charIn : [Char] -> Pattern Text - 923. -- ##Text.patterns.charRange + 939. -- ##Text.patterns.charRange builtin.Text.patterns.charRange : Char -> Char -> Pattern Text - 924. -- ##Text.patterns.digit + 940. -- ##Text.patterns.digit builtin.Text.patterns.digit : Pattern Text - 925. -- ##Text.patterns.eof + 941. -- ##Text.patterns.eof builtin.Text.patterns.eof : Pattern Text - 926. -- ##Text.patterns.letter + 942. -- ##Text.patterns.letter builtin.Text.patterns.letter : Pattern Text - 927. -- ##Text.patterns.literal + 943. -- ##Text.patterns.literal builtin.Text.patterns.literal : Text -> Pattern Text - 928. -- ##Text.patterns.lookbehind + 944. -- ##Text.patterns.lookbehind builtin.Text.patterns.lookbehind : Class -> Pattern Text - 929. -- ##Text.patterns.negativeLookbehind + 945. -- ##Text.patterns.negativeLookbehind builtin.Text.patterns.negativeLookbehind : Class -> Pattern Text - 930. -- ##Text.patterns.notCharIn + 946. -- ##Text.patterns.notCharIn builtin.Text.patterns.notCharIn : [Char] -> Pattern Text - 931. -- ##Text.patterns.notCharRange + 947. -- ##Text.patterns.notCharRange builtin.Text.patterns.notCharRange : Char -> Char -> Pattern Text - 932. -- ##Text.patterns.punctuation + 948. -- ##Text.patterns.punctuation builtin.Text.patterns.punctuation : Pattern Text - 933. -- ##Text.patterns.space + 949. -- ##Text.patterns.space builtin.Text.patterns.space : Pattern Text - 934. -- ##Text.repeat + 950. -- ##Text.repeat builtin.Text.repeat : Nat -> Text -> Text - 935. -- ##Text.reverse + 951. -- ##Text.reverse builtin.Text.reverse : Text -> Text - 936. -- ##Text.size + 952. -- ##Text.size builtin.Text.size : Text -> Nat - 937. -- ##Text.take + 953. -- ##Text.take builtin.Text.take : Nat -> Text -> Text - 938. -- ##Text.toCharList + 954. -- ##Text.toCharList builtin.Text.toCharList : Text -> [Char] - 939. -- ##Text.toLowercase + 955. -- ##Text.toLowercase builtin.Text.toLowercase : Text -> Text - 940. -- ##Text.toUppercase + 956. -- ##Text.toUppercase builtin.Text.toUppercase : Text -> Text - 941. -- ##Text.toUtf8 + 957. -- ##Text.toUtf8 builtin.Text.toUtf8 : Text -> Bytes - 942. -- ##Text.uncons + 958. -- ##Text.uncons builtin.Text.uncons : Text -> Optional (Char, Text) - 943. -- ##Text.unsnoc + 959. -- ##Text.unsnoc builtin.Text.unsnoc : Text -> Optional (Text, Char) - 944. -- ##ThreadId.toText + 960. -- ##ThreadId.toText builtin.ThreadId.toText : ThreadId -> Text - 945. -- ##todo + 961. -- ##todo builtin.todo : a -> b - 946. -- #2lg4ah6ir6t129m33d7gssnigacral39qdamo20mn6r2vefliubpeqnjhejai9ekjckv0qnu9mlu3k9nbpfhl2schec4dohn7rjhjt8 + 962. -- #2lg4ah6ir6t129m33d7gssnigacral39qdamo20mn6r2vefliubpeqnjhejai9ekjckv0qnu9mlu3k9nbpfhl2schec4dohn7rjhjt8 structural type builtin.Tuple a b - 947. -- #2lg4ah6ir6t129m33d7gssnigacral39qdamo20mn6r2vefliubpeqnjhejai9ekjckv0qnu9mlu3k9nbpfhl2schec4dohn7rjhjt8#0 + 963. -- #2lg4ah6ir6t129m33d7gssnigacral39qdamo20mn6r2vefliubpeqnjhejai9ekjckv0qnu9mlu3k9nbpfhl2schec4dohn7rjhjt8#0 builtin.Tuple.Cons : a -> b -> Tuple a b - 948. -- ##UDPSocket + 964. -- ##UDPSocket builtin type builtin.UDPSocket - 949. -- #00nv2kob8fp11qdkr750rlppf81cda95m3q0niohj1pvljnjl4r3hqrhvp1un2p40ptgkhhsne7hocod90r3qdlus9guivh7j3qcq0g + 965. -- ##UnboxedArray + builtin type builtin.UnboxedArray + + 966. -- ##UnboxedArray.divideR + builtin.UnboxedArray.divideR : UnboxedArray Nat + -> Nat + -> UnboxedArray Nat + + 967. -- ##UnboxedArray.fromNatList + builtin.UnboxedArray.fromNatList : [Nat] + -> UnboxedArray Nat + + 968. -- ##UnboxedArray.modR + builtin.UnboxedArray.modR : UnboxedArray Nat + -> Nat + -> UnboxedArray Nat + + 969. -- ##UnboxedArray.multiplyR + builtin.UnboxedArray.multiplyR : UnboxedArray Nat + -> Nat + -> UnboxedArray Nat + + 970. -- ##UnboxedArray.occurrences + builtin.UnboxedArray.occurrences : UnboxedArray Nat + -> ImmutableArray (UnboxedArray Nat) + + 971. -- ##UnboxedArray.pick + builtin.UnboxedArray.pick : UnboxedArray Nat + -> UnboxedArray a + ->{Exception} UnboxedArray a + + 972. -- ##UnboxedArray.pick1 + builtin.UnboxedArray.pick1 : UnboxedArray Nat + -> UnboxedArray a + ->{Exception} UnboxedArray a + + 973. -- ##UnboxedArray.pick1Or + builtin.UnboxedArray.pick1Or : a + -> UnboxedArray Nat + -> UnboxedArray a + ->{Exception} UnboxedArray a + + 974. -- ##UnboxedArray.size + builtin.UnboxedArray.size : UnboxedArray a -> Nat + + 975. -- ##UnboxedArray.toList + builtin.UnboxedArray.toList : UnboxedArray a -> [a] + + 976. -- #00nv2kob8fp11qdkr750rlppf81cda95m3q0niohj1pvljnjl4r3hqrhvp1un2p40ptgkhhsne7hocod90r3qdlus9guivh7j3qcq0g structural type builtin.Unit - 950. -- #00nv2kob8fp11qdkr750rlppf81cda95m3q0niohj1pvljnjl4r3hqrhvp1un2p40ptgkhhsne7hocod90r3qdlus9guivh7j3qcq0g#0 + 977. -- #00nv2kob8fp11qdkr750rlppf81cda95m3q0niohj1pvljnjl4r3hqrhvp1un2p40ptgkhhsne7hocod90r3qdlus9guivh7j3qcq0g#0 builtin.Unit.Unit : () - 951. -- ##Universal.< + 978. -- ##Universal.< builtin.Universal.< : a -> a -> Boolean - 952. -- ##Universal.<= + 979. -- ##Universal.<= builtin.Universal.<= : a -> a -> Boolean - 953. -- ##Universal.== + 980. -- ##Universal.== builtin.Universal.== : a -> a -> Boolean - 954. -- ##Universal.> + 981. -- ##Universal.> builtin.Universal.> : a -> a -> Boolean - 955. -- ##Universal.>= + 982. -- ##Universal.>= builtin.Universal.>= : a -> a -> Boolean - 956. -- ##Universal.compare + 983. -- ##Universal.compare builtin.Universal.compare : a -> a -> Int - 957. -- ##Universal.murmurHash + 984. -- ##Universal.murmurHash builtin.Universal.murmurHash : a -> Nat - 958. -- ##Universal.murmurHashUntyped + 985. -- ##Universal.murmurHashUntyped builtin.Universal.murmurHashUntyped : a -> Nat - 959. -- ##unsafe.coerceAbilities + 986. -- ##unsafe.coerceAbilities builtin.unsafe.coerceAbilities : (a ->{e1} b) -> a -> b - 960. -- ##Value + 987. -- ##Value builtin type builtin.Value - 961. -- ##Value.dependencies + 988. -- ##Value.dependencies builtin.Value.dependencies : Value -> [Link.Term] - 962. -- ##Value.deserialize + 989. -- ##Value.deserialize builtin.Value.deserialize : Bytes -> Either Text Value - 963. -- ##Value.load + 990. -- ##Value.load builtin.Value.load : Value ->{IO} Either [Link.Term] a - 964. -- ##Value.serialize + 991. -- ##Value.serialize builtin.Value.serialize : Value -> Bytes - 965. -- ##Value.serialize.versioned + 992. -- ##Value.serialize.versioned builtin.Value.serialize.versioned : Nat -> Value -> Bytes - 966. -- ##Value.value + 993. -- ##Value.value builtin.Value.value : a -> Value - 967. -- #dem6aglnj8cppfrnq9qipl7geo5pim3auo9cmv1rhh5la9edalj19sspbpm1pd4vh0plokdh6qfo48gs034dqlg0s7j9fhr9p9ndtpo + 994. -- #dem6aglnj8cppfrnq9qipl7geo5pim3auo9cmv1rhh5la9edalj19sspbpm1pd4vh0plokdh6qfo48gs034dqlg0s7j9fhr9p9ndtpo type builtin.Year - 968. -- #dem6aglnj8cppfrnq9qipl7geo5pim3auo9cmv1rhh5la9edalj19sspbpm1pd4vh0plokdh6qfo48gs034dqlg0s7j9fhr9p9ndtpo#0 + 995. -- #dem6aglnj8cppfrnq9qipl7geo5pim3auo9cmv1rhh5la9edalj19sspbpm1pd4vh0plokdh6qfo48gs034dqlg0s7j9fhr9p9ndtpo#0 builtin.Year.Year : Nat -> Year - 969. -- #iur47o4jj4v554bfjsu95t8eru2vtko62d4jo4kvvt0mqnshtbleit15dlj1gkrpmokmf2pbegon8cof7600mv9s0m9229uk19bdvgg + 996. -- #iur47o4jj4v554bfjsu95t8eru2vtko62d4jo4kvvt0mqnshtbleit15dlj1gkrpmokmf2pbegon8cof7600mv9s0m9229uk19bdvgg cache : [(Link.Term, Code)] ->{IO, Exception} () - 970. -- #okolgrio28p1mbl1bfjfs9qtsr1m9upblcm3ul872gcir6epkcbq619vk5bdq1fnr371nelsof6jsp8469g4j6f0gg3007p79o4kf18 + 997. -- #okolgrio28p1mbl1bfjfs9qtsr1m9upblcm3ul872gcir6epkcbq619vk5bdq1fnr371nelsof6jsp8469g4j6f0gg3007p79o4kf18 check : Text -> Boolean ->{Stream Result} () - 971. -- #je42vk6rsefjlup01e1fmmdssf5i3ba9l6aka3bipggetfm8o4i8d1q5d7hddggu5jure1bu5ot8aq5in31to4788ctrtpb44ri83r8 + 998. -- #je42vk6rsefjlup01e1fmmdssf5i3ba9l6aka3bipggetfm8o4i8d1q5d7hddggu5jure1bu5ot8aq5in31to4788ctrtpb44ri83r8 checks : [Boolean] -> [Result] - 972. -- #jf82mm2gvoc3h5ibpejfeohkrl8022m38mi14r08v8s4np9187smglvtbk8u109ri427af2j5fuv1an6lq2k718vgtvr0c4rt9t32vg + 999. -- #jf82mm2gvoc3h5ibpejfeohkrl8022m38mi14r08v8s4np9187smglvtbk8u109ri427af2j5fuv1an6lq2k718vgtvr0c4rt9t32vg clientSocket : Text -> Text ->{IO, Exception} Socket - 973. -- #72auim6cvu5tl8ubmfj5m2p1a822m0jq6fmi8osd99ujbs9h20o3t9e47hcitdcku1e7d40r052sdmfgi1oktio9is8tf503f5unh7g + 1000. -- #72auim6cvu5tl8ubmfj5m2p1a822m0jq6fmi8osd99ujbs9h20o3t9e47hcitdcku1e7d40r052sdmfgi1oktio9is8tf503f5unh7g closeFile : Handle ->{IO, Exception} () - 974. -- #nsvn5rj51knr3j62dp1ki0glb01bqj3ccq4537e1hgl2m89o9v7ghc54bu12r515mum791tcf4vgsrb6b1csa0tol1ldkiqrb8akkpo + 1001. -- #nsvn5rj51knr3j62dp1ki0glb01bqj3ccq4537e1hgl2m89o9v7ghc54bu12r515mum791tcf4vgsrb6b1csa0tol1ldkiqrb8akkpo closeSocket : Socket ->{IO, Exception} () - 975. -- #ei73jot64ogu4q76rm3jecdn76vmrj0h7riqqecf1d439mjav7ehh0h7rol5s18nupv586ln3l0m4kmh99p5mhgv6qfcrfgilkgq1oo + 1002. -- #ei73jot64ogu4q76rm3jecdn76vmrj0h7riqqecf1d439mjav7ehh0h7rol5s18nupv586ln3l0m4kmh99p5mhgv6qfcrfgilkgq1oo Code.transitiveDeps : Link.Term ->{IO} [(Link.Term, Code)] - 976. -- #srpc2uag5p1grvshbcm3urjntakgi3g3dthfse2cp38sd6uestd5neseces5ue7kum2ca0gsg9i0cilkl0gn8dn3q5dn86v4r8lbha0 + 1003. -- #srpc2uag5p1grvshbcm3urjntakgi3g3dthfse2cp38sd6uestd5neseces5ue7kum2ca0gsg9i0cilkl0gn8dn3q5dn86v4r8lbha0 compose : (i1 ->{g1} o) -> (i ->{g} i1) -> i ->{g1, g} o - 977. -- #stnrk323b8mm7dknlonfl70epd9f9ede60iom7sgok31mmggnic7etgi0are2uccs9g429qo3ruaeb9tk90bh35obnce1038p5qe6co + 1004. -- #stnrk323b8mm7dknlonfl70epd9f9ede60iom7sgok31mmggnic7etgi0are2uccs9g429qo3ruaeb9tk90bh35obnce1038p5qe6co compose2 : (i2 ->{g2} o) -> (i1 ->{g1} i ->{g} i2) -> i1 -> i ->{g2, g1, g} o - 978. -- #mrc183aovjcae3i03r1a0ia26crmmkcf2e723pda860ps6q11rancsenjoqhc3fn0eraih1mobcvt245jr77l27uoujqa452utq8p68 + 1005. -- #mrc183aovjcae3i03r1a0ia26crmmkcf2e723pda860ps6q11rancsenjoqhc3fn0eraih1mobcvt245jr77l27uoujqa452utq8p68 compose3 : (i3 ->{g3} o) -> (i2 ->{g2} i1 ->{g1} i ->{g} i3) -> i2 @@ -3542,201 +3667,201 @@ This transcript is intended to make visible accidental changes to the hashing al -> i ->{g3, g2, g1, g} o - 979. -- #ilkeid6l866bmq90d2v1ilqp9dsjo6ucmf8udgrokq3nr3mo9skl2vao2mo7ish136as52rsf19u9v3jkmd85bl08gnmamo4e5v2fqo + 1006. -- #ilkeid6l866bmq90d2v1ilqp9dsjo6ucmf8udgrokq3nr3mo9skl2vao2mo7ish136as52rsf19u9v3jkmd85bl08gnmamo4e5v2fqo contains : Text -> Text -> Boolean - 980. -- #tc40jeeetbig6vcl7j6v1n0o59r8ugmjkhi6tee6o5fmkkbhmttevg093b29637gb6p70trmh9lrje86hhuuiqq565qs20qmjg4kbk0 + 1007. -- #tc40jeeetbig6vcl7j6v1n0o59r8ugmjkhi6tee6o5fmkkbhmttevg093b29637gb6p70trmh9lrje86hhuuiqq565qs20qmjg4kbk0 crawl : [(Link.Term, Code)] -> [Link.Term] ->{IO} [(Link.Term, Code)] - 981. -- #urivjjshp3j122vb412mr5rq7jbf21ij1grh4amk1jfd33nfbcgv4emnnas5ekmblc4j4gsncoofatcdtktv0tp1f8sk8p06occb0hg + 1008. -- #urivjjshp3j122vb412mr5rq7jbf21ij1grh4amk1jfd33nfbcgv4emnnas5ekmblc4j4gsncoofatcdtktv0tp1f8sk8p06occb0hg createTempDirectory : Text ->{IO, Exception} Text - 982. -- #h4ob7r10rul2v0dekeqjdfctbqr943ut9fgln5jgdgk0reg5d7ha0nlr16vcgcusfncgmquf5pv048lt3l9k7m653i7m0odmrvl69t0 + 1009. -- #h4ob7r10rul2v0dekeqjdfctbqr943ut9fgln5jgdgk0reg5d7ha0nlr16vcgcusfncgmquf5pv048lt3l9k7m653i7m0odmrvl69t0 decodeCert : Bytes ->{Exception} SignedCert - 983. -- #ihbmfc4r7o3391jocjm6v4mojpp3hvt84ivqigrmp34vb5l3d7mmdlvh3hkrtebi812npso7rqo203a59pbs7r2g78ig6jvsv0nva38 + 1010. -- #ihbmfc4r7o3391jocjm6v4mojpp3hvt84ivqigrmp34vb5l3d7mmdlvh3hkrtebi812npso7rqo203a59pbs7r2g78ig6jvsv0nva38 delay : Nat ->{IO, Exception} () - 984. -- #donnstdrflrkve7cqi26cqd90kvpdht2gp1q7v5u816a2v0h8uhevh4o618d6cdafqcnia2uqdanpn62sb7nafp77rqavj258vvjdr0 + 1011. -- #donnstdrflrkve7cqi26cqd90kvpdht2gp1q7v5u816a2v0h8uhevh4o618d6cdafqcnia2uqdanpn62sb7nafp77rqavj258vvjdr0 directoryContents : Text ->{IO, Exception} [Text] - 985. -- #ac6oh72pmu5gojdaff977lj48f83rr5cuquv2nhll3iiit0hu04dr2nflrvi5chbond10mnplq1d0uqu9i52uc7ebvn3dlqp1n504qg + 1012. -- #ac6oh72pmu5gojdaff977lj48f83rr5cuquv2nhll3iiit0hu04dr2nflrvi5chbond10mnplq1d0uqu9i52uc7ebvn3dlqp1n504qg Either.isLeft : Either a b -> Boolean - 986. -- #5n8bp6bvja969upaa6l2l346hab5vhemoa9ehb0n7qjer0kfapvuc7bd5hcugrf2o2auu11e9hstlf2g8uv6h3fn3v8ggmeig4blfe8 + 1013. -- #5n8bp6bvja969upaa6l2l346hab5vhemoa9ehb0n7qjer0kfapvuc7bd5hcugrf2o2auu11e9hstlf2g8uv6h3fn3v8ggmeig4blfe8 Either.mapLeft : (i ->{g} o) -> Either i b ->{g} Either o b - 987. -- #jp6itgd1nh1tjn2c7e0ebkskk7sgdooh48e023l1hhkvrkuhrklrdf4omr73jpvnodfbtt4tki495480n0bp54fd0o3hngj8k2knqs8 + 1014. -- #jp6itgd1nh1tjn2c7e0ebkskk7sgdooh48e023l1hhkvrkuhrklrdf4omr73jpvnodfbtt4tki495480n0bp54fd0o3hngj8k2knqs8 Either.raiseMessage : v -> Either Text b ->{Exception} b - 988. -- #4pa382t5o39uapf9tncjra8parmg9rppsn9ob3qnnrvbvtqc1oq8g3u69uapbjee9d118v8or3suhc3vu82de7l0c0og5h01beqjnko + 1015. -- #4pa382t5o39uapf9tncjra8parmg9rppsn9ob3qnnrvbvtqc1oq8g3u69uapbjee9d118v8or3suhc3vu82de7l0c0og5h01beqjnko evalTest : '{IO, TempDirs, Exception, Stream Result} a ->{IO, Exception} ([Result], a) - 989. -- #4n0fgs00hpsj3paqnm9bfm4nbt9cbrin3hl88i992m9tjiq1ik7eq72asu4hcg885uti36tbnj5rudt56eahhnut1nobofg86pk1bng + 1016. -- #4n0fgs00hpsj3paqnm9bfm4nbt9cbrin3hl88i992m9tjiq1ik7eq72asu4hcg885uti36tbnj5rudt56eahhnut1nobofg86pk1bng structural ability Exception structural ability builtin.Exception - 990. -- #ilea09hgph2cdqsiaeup3o58met3e62m61nckvc89v20cq3g5e71pe19idi270o7i0jdfttra51lvi1vhs0g6oluvhavhdetpor74e0 + 1017. -- #ilea09hgph2cdqsiaeup3o58met3e62m61nckvc89v20cq3g5e71pe19idi270o7i0jdfttra51lvi1vhs0g6oluvhavhdetpor74e0 Exception.catch : '{g, Exception} a ->{g} Either Failure a - 991. -- #hbhvk2e00l6o7qhn8e7p6dc36bjl7ljm0gn2df5clidlrdoufsig1gt5pjhg72kl67folgg2b892kh9jc1oh0l79h4p8dqhcf1tkde0 + 1018. -- #hbhvk2e00l6o7qhn8e7p6dc36bjl7ljm0gn2df5clidlrdoufsig1gt5pjhg72kl67folgg2b892kh9jc1oh0l79h4p8dqhcf1tkde0 Exception.failure : Text -> a -> Failure - 992. -- #4n0fgs00hpsj3paqnm9bfm4nbt9cbrin3hl88i992m9tjiq1ik7eq72asu4hcg885uti36tbnj5rudt56eahhnut1nobofg86pk1bng#0 + 1019. -- #4n0fgs00hpsj3paqnm9bfm4nbt9cbrin3hl88i992m9tjiq1ik7eq72asu4hcg885uti36tbnj5rudt56eahhnut1nobofg86pk1bng#0 Exception.raise, builtin.Exception.raise : Failure ->{Exception} x - 993. -- #5mqjoauctm02dlqdc10cc66relu40997d6o1u8fj7vv7g0i2mtacjc83afqhuekll1gkqr9vv4lq7aenanq4kf53kcce4l1srr6ip08 + 1020. -- #5mqjoauctm02dlqdc10cc66relu40997d6o1u8fj7vv7g0i2mtacjc83afqhuekll1gkqr9vv4lq7aenanq4kf53kcce4l1srr6ip08 Exception.reraise : Either Failure a ->{Exception} a - 994. -- #eak26rh0k633mbfsj8stppgj1e4l6gest2dfb2ol538l2hcmn1gpspq4vf3g72f1g8jnokfk8uv614cbdvcof0hk21nk2e55jseo18g + 1021. -- #eak26rh0k633mbfsj8stppgj1e4l6gest2dfb2ol538l2hcmn1gpspq4vf3g72f1g8jnokfk8uv614cbdvcof0hk21nk2e55jseo18g Exception.toEither : '{ε, Exception} a ->{ε} Either Failure a - 995. -- #g2qp63rds1msu1c3ejqfqnsbhsiigsneuij8eq3kfnv2gdmpqui5g7t0alo1cv6mqqgp36ihvst2jc9t1jp6tnumk18mn5v8m9r3n58 + 1022. -- #g2qp63rds1msu1c3ejqfqnsbhsiigsneuij8eq3kfnv2gdmpqui5g7t0alo1cv6mqqgp36ihvst2jc9t1jp6tnumk18mn5v8m9r3n58 Exception.toEither.handler : Request {Exception} a -> Either Failure a - 996. -- #q1e3avumkdpbjalk4v7c5rog11ertc0ra5nlkpgd23n6jmbki58rkebl25cbfbn7i3t274srrpbgont7j12i80hkh3gnt713poo13c8 + 1023. -- #q1e3avumkdpbjalk4v7c5rog11ertc0ra5nlkpgd23n6jmbki58rkebl25cbfbn7i3t274srrpbgont7j12i80hkh3gnt713poo13c8 Exception.unsafeRun! : '{g, Exception} a ->{g} a - 997. -- #b6eskvgfv4vr30obfnaegflsf0h8u2t8816d3qhl2hl3r0l794rqgqks67q5hd46qlm06pbgt01439hmmk8jvuu3adc45cra0ggeqhg + 1024. -- #b6eskvgfv4vr30obfnaegflsf0h8u2t8816d3qhl2hl3r0l794rqgqks67q5hd46qlm06pbgt01439hmmk8jvuu3adc45cra0ggeqhg expect : Text -> (a -> a -> Boolean) -> a -> a ->{Stream Result} () - 998. -- #6oqh4j31ujgecbu9kionucdbv8mbiiuasqrt294trdbqaoqlm5milniomc2c8jej0e2hco809kdb856djrr12luck2onn5que7kp2eo + 1025. -- #6oqh4j31ujgecbu9kionucdbv8mbiiuasqrt294trdbqaoqlm5milniomc2c8jej0e2hco809kdb856djrr12luck2onn5que7kp2eo expectU : Text -> a -> a ->{Stream Result} () - 999. -- #ug02c2qol2gp0af97nuceu59r3jm9f52lro04ahkandkin8sabseuckr6ep0lvuknjlfhhogj9k5m2epp15d0j8bipc8iljgg8at7ho + 1026. -- #ug02c2qol2gp0af97nuceu59r3jm9f52lro04ahkandkin8sabseuckr6ep0lvuknjlfhhogj9k5m2epp15d0j8bipc8iljgg8at7ho fail : Text -> b ->{Exception} c - 1000. -- #ri1irkdfcdg3a0c3orv23fk2vjda5n0mlp7ooi0hskvaloa8d8qs9i7essti135k0sfomqajspr9idhu2hgjpmmb6etfabj8jdo02a8 + 1027. -- #ri1irkdfcdg3a0c3orv23fk2vjda5n0mlp7ooi0hskvaloa8d8qs9i7essti135k0sfomqajspr9idhu2hgjpmmb6etfabj8jdo02a8 fileExists : Text ->{IO, Exception} Boolean - 1001. -- #urlf22mo1assv31k95beddq2ava91p953ueg8kdcddofc2ftogrt10jemg760mkcd8m3lnjc3keog8anop0r0kmo2k1lggbt2chse30 + 1028. -- #urlf22mo1assv31k95beddq2ava91p953ueg8kdcddofc2ftogrt10jemg760mkcd8m3lnjc3keog8anop0r0kmo2k1lggbt2chse30 first : (a ->{g} b) -> (a, c) ->{g} (b, c) - 1002. -- #4rfr9je7fbsithij70iaqofqu4hgl6ji7t06ok0k98a5ni1397di8d0mllef935mdvj0e57hbg6rm9nn6ok5gcnvqr0vmodelli9qqg + 1029. -- #4rfr9je7fbsithij70iaqofqu4hgl6ji7t06ok0k98a5ni1397di8d0mllef935mdvj0e57hbg6rm9nn6ok5gcnvqr0vmodelli9qqg fromB32 : Bytes ->{Exception} Bytes - 1003. -- #13fpchr37ua0pr38ssr7j22pudmseuedf490aok18upagh0f00kg40guj9pgl916v9qurqrvu53f3lpsvi0s82hg3dtjacanrpjvs38 + 1030. -- #13fpchr37ua0pr38ssr7j22pudmseuedf490aok18upagh0f00kg40guj9pgl916v9qurqrvu53f3lpsvi0s82hg3dtjacanrpjvs38 fromHex : Text -> Bytes - 1004. -- #b5ljjbncgukq958frsqtuebv9b1ack0blhqcue5km6k15gotubesaj6bv3ii61f676qcfq5rimmjtrihio7pnk8r9noe3s3v7lk4i5o + 1031. -- #b5ljjbncgukq958frsqtuebv9b1ack0blhqcue5km6k15gotubesaj6bv3ii61f676qcfq5rimmjtrihio7pnk8r9noe3s3v7lk4i5o getArgs : '{IO, Exception} [Text] - 1005. -- #od69b4q2upcvsdjhb7ra8unq1r8t7924mra5j5s8f7n173bmslp8dprhgt1mjdj49qj10h2gj91eflke1avj0qlecus1mdevufm3hho + 1032. -- #od69b4q2upcvsdjhb7ra8unq1r8t7924mra5j5s8f7n173bmslp8dprhgt1mjdj49qj10h2gj91eflke1avj0qlecus1mdevufm3hho getBuffering : Handle ->{IO, Exception} BufferMode - 1006. -- #fupr0p6pmt834qep0jp18h9jhf4uadmtrsndpfac3kpkf4q4foqnqi6dmc6u4mgs9aubl8issknu89taqhi1mvaeg1ctbt3uf2lidh8 + 1033. -- #fupr0p6pmt834qep0jp18h9jhf4uadmtrsndpfac3kpkf4q4foqnqi6dmc6u4mgs9aubl8issknu89taqhi1mvaeg1ctbt3uf2lidh8 getBytes : Handle -> Nat ->{IO, Exception} Bytes - 1007. -- #qgocu5n2e7urg44ch4m8upn24efh6jk4cmp8bjsvhnenhahq8nniauav0ihpqa31p57v8fhqdep4fh5dj7nj1uul7596us04dr6dqng + 1034. -- #qgocu5n2e7urg44ch4m8upn24efh6jk4cmp8bjsvhnenhahq8nniauav0ihpqa31p57v8fhqdep4fh5dj7nj1uul7596us04dr6dqng getChar : Handle ->{IO, Exception} Char - 1008. -- #t92if409jh848oifd8v6bbu6o0hd0916rc3rbdlj4vf46oll2tradqrilk6r28mmm19dao5sh8l349qrhc59qopv4u1hba3ndfiitq8 + 1035. -- #t92if409jh848oifd8v6bbu6o0hd0916rc3rbdlj4vf46oll2tradqrilk6r28mmm19dao5sh8l349qrhc59qopv4u1hba3ndfiitq8 getEcho : Handle ->{IO, Exception} Boolean - 1009. -- #5nc47o8abjut8sab84ltouhiv3mtid9poipn2b53q3bpceebdimb4sb1e7lkrmu3bn3ivgcqe568upqqh5clrqgkhfdsji58kcdrt4g + 1036. -- #5nc47o8abjut8sab84ltouhiv3mtid9poipn2b53q3bpceebdimb4sb1e7lkrmu3bn3ivgcqe568upqqh5clrqgkhfdsji58kcdrt4g getLine : Handle ->{IO, Exception} Text - 1010. -- #l9pfqiqb3u9o8qo7jnaajph1qh0jbodih4vtuqti53vjmtp4diddidt8r2qa826918bt7b1cf873oo511tkivfkg35fo5o4kh5j35r0 + 1037. -- #l9pfqiqb3u9o8qo7jnaajph1qh0jbodih4vtuqti53vjmtp4diddidt8r2qa826918bt7b1cf873oo511tkivfkg35fo5o4kh5j35r0 getSomeBytes : Handle -> Nat ->{IO, Exception} Bytes - 1011. -- #mdhva408l4fji5h23okmhk5t4dakt1lokuie28nsdspal45lbhe06vkmcu8hf8jplse56o576ogn72j7k5nbph06nl36o957qn25tvo + 1038. -- #mdhva408l4fji5h23okmhk5t4dakt1lokuie28nsdspal45lbhe06vkmcu8hf8jplse56o576ogn72j7k5nbph06nl36o957qn25tvo getTempDirectory : '{IO, Exception} Text - 1012. -- #vniqolukf0296u5dc6d68ngfvi9quuuklcsjodnfm0tm8atslq19sidso2uqnbf4g6h23qck69dpd0oceb9539ufoo12rhdcdd934lo + 1039. -- #vniqolukf0296u5dc6d68ngfvi9quuuklcsjodnfm0tm8atslq19sidso2uqnbf4g6h23qck69dpd0oceb9539ufoo12rhdcdd934lo handlePosition : Handle ->{IO, Exception} Nat - 1013. -- #85s6gvfbpv8lhgq8m36h7ebvan4lljiu2ffehbgese5c11h3vpqlcssts8svi2qo2c5d68oeke092puta1ng84982hiid972hss9m40 + 1040. -- #85s6gvfbpv8lhgq8m36h7ebvan4lljiu2ffehbgese5c11h3vpqlcssts8svi2qo2c5d68oeke092puta1ng84982hiid972hss9m40 handshake : Tls ->{IO, Exception} () - 1014. -- #128490j1tmitiu3vesv97sqspmefobg1am38vos9p0vt4s1bhki87l7kj4cctquffkp40eanmr9ummfglj9i7s25jrpb32ob5sf2tio + 1041. -- #128490j1tmitiu3vesv97sqspmefobg1am38vos9p0vt4s1bhki87l7kj4cctquffkp40eanmr9ummfglj9i7s25jrpb32ob5sf2tio hex : Bytes -> Text - 1015. -- #ttjui80dbufvf3vgaddmcr065dpgl0rtp68i5cdht6tq4t2vk3i2vg60hi77rug368qijgijf8oui27te7o5oq0t0osm6dg65c080i0 + 1042. -- #ttjui80dbufvf3vgaddmcr065dpgl0rtp68i5cdht6tq4t2vk3i2vg60hi77rug368qijgijf8oui27te7o5oq0t0osm6dg65c080i0 id : a -> a - 1016. -- #0lj5fufff9ocn6lfgc3sv23aup971joh61ei6llu7djblug7tmv2avijc91ing6jmm42hu3akdefl1ttdvepk69sc8jslih1g80npg8 + 1043. -- #0lj5fufff9ocn6lfgc3sv23aup971joh61ei6llu7djblug7tmv2avijc91ing6jmm42hu3akdefl1ttdvepk69sc8jslih1g80npg8 isDirectory : Text ->{IO, Exception} Boolean - 1017. -- #flakrb6iks7vgijtm8dhipj14v57tk96nq5uj3uluplpoamb1etufn7rsjrelaj3letaa0e2aivq95794nv2b8a8vqbqdumd6i0fvpo + 1044. -- #flakrb6iks7vgijtm8dhipj14v57tk96nq5uj3uluplpoamb1etufn7rsjrelaj3letaa0e2aivq95794nv2b8a8vqbqdumd6i0fvpo isFileEOF : Handle ->{IO, Exception} Boolean - 1018. -- #5qan8ssedn9pouru70v1a06tkivapiv0es8k6v3hjpmkmboekktnh30ia7asmevglf4pu8ujb0t9vsctjsjtam160o9bn9g02uciui8 + 1045. -- #5qan8ssedn9pouru70v1a06tkivapiv0es8k6v3hjpmkmboekktnh30ia7asmevglf4pu8ujb0t9vsctjsjtam160o9bn9g02uciui8 isFileOpen : Handle ->{IO, Exception} Boolean - 1019. -- #2a11371klrv2i8726knma0l3g14on4m2ucihpg65cjj9k930aefg65ovvg0ak4uv3i9evtnu0a5249q3i8ugheqd65cnmgquc1a88n0 + 1046. -- #2a11371klrv2i8726knma0l3g14on4m2ucihpg65cjj9k930aefg65ovvg0ak4uv3i9evtnu0a5249q3i8ugheqd65cnmgquc1a88n0 isNone : Optional a -> Boolean - 1020. -- #jsqdsol9g3qnkub2f2ogertbiieldlkqh859vn5qovub6halelfmpv1tc50u1n23kotgd9nnejnn0n6foef8aqfcp615ashd0cfi3j8 + 1047. -- #jsqdsol9g3qnkub2f2ogertbiieldlkqh859vn5qovub6halelfmpv1tc50u1n23kotgd9nnejnn0n6foef8aqfcp615ashd0cfi3j8 isSeekable : Handle ->{IO, Exception} Boolean - 1021. -- #01jcbfeq5lrhrbhqm89lp7l2oejbavabrktbcnf14cgtqe3ftnntvl98mpiamfl4ksbp9sh6qcen90q5kbf7dg997ej4effu32d3jbo + 1048. -- #01jcbfeq5lrhrbhqm89lp7l2oejbavabrktbcnf14cgtqe3ftnntvl98mpiamfl4ksbp9sh6qcen90q5kbf7dg997ej4effu32d3jbo isSome : Optional a -> Boolean - 1022. -- #gop2v9s6l24ii1v6bf1nks2h0h18pato0vbsf4u3el18s7mp1jfnp4c7fesdf9sunnlv5f5a9fjr1s952pte87mf63l1iqki9bp0mio + 1049. -- #gop2v9s6l24ii1v6bf1nks2h0h18pato0vbsf4u3el18s7mp1jfnp4c7fesdf9sunnlv5f5a9fjr1s952pte87mf63l1iqki9bp0mio List.all : (a ->{ε} Boolean) -> [a] ->{ε} Boolean - 1023. -- #thvdk6pgdi019on95nttjhg3rbqo7aq5lv9fqgehg00657utkitc1k5r9bfl7soqdrqd82tjmesn5ocb6d30ire6vkl0ad6rcppg5vo + 1050. -- #thvdk6pgdi019on95nttjhg3rbqo7aq5lv9fqgehg00657utkitc1k5r9bfl7soqdrqd82tjmesn5ocb6d30ire6vkl0ad6rcppg5vo List.filter : (a ->{g} Boolean) -> [a] ->{g} [a] - 1024. -- #ca71f74kmn16u76lch7ropsgou2t3lbtc5hr06858l97qkhk0b4ado1pnii4hqfannelbgv4qruv4f1iqn43kgkbsq8lpjmo3mnrp38 + 1051. -- #ca71f74kmn16u76lch7ropsgou2t3lbtc5hr06858l97qkhk0b4ado1pnii4hqfannelbgv4qruv4f1iqn43kgkbsq8lpjmo3mnrp38 List.foldLeft : (b ->{g} a ->{g} b) -> b -> [a] ->{g} b - 1025. -- #e91vis1qe54te8712hmmt23d77s1j8rd79anahduiq7gko49uagfbl9e58825b59r8bk1r0dc73uneej4u9e1ie0hsn50pigdo7qcio + 1052. -- #e91vis1qe54te8712hmmt23d77s1j8rd79anahduiq7gko49uagfbl9e58825b59r8bk1r0dc73uneej4u9e1ie0hsn50pigdo7qcio List.foldMap : (a ->{e} [b]) -> [a] ->{e} [b] - 1026. -- #aaseo3ijulphgu0t6la2ehtsv35keel2ic2il9gqlssp7lqsj45iuraok5o8ma95dmsm8v5m6thtijhaecaf5ko6a7jpel53ogs7t50 + 1053. -- #aaseo3ijulphgu0t6la2ehtsv35keel2ic2il9gqlssp7lqsj45iuraok5o8ma95dmsm8v5m6thtijhaecaf5ko6a7jpel53ogs7t50 List.foldMap0 : (a ->{e} [b]) -> [b] -> [a] ->{e} [b] - 1027. -- #o1gssqn32qvl4pa79a0lko5ksvbn0rtv8u5g9jpd73ig94om2r4nlbcqa4nd968q74ios37eg0ol36776praolimpch8jsbohg47j2o + 1054. -- #o1gssqn32qvl4pa79a0lko5ksvbn0rtv8u5g9jpd73ig94om2r4nlbcqa4nd968q74ios37eg0ol36776praolimpch8jsbohg47j2o List.forEach : [a] -> (a ->{e} ()) ->{e} () - 1028. -- #ol837rn3935jnul9r2ri4i7gqonu2jp9maqmbr072mmk35tl0kq19s4ltuche8seihf8d246a6upgpdlvs6ocdbsgdm7k88bonhgmn8 + 1055. -- #ol837rn3935jnul9r2ri4i7gqonu2jp9maqmbr072mmk35tl0kq19s4ltuche8seihf8d246a6upgpdlvs6ocdbsgdm7k88bonhgmn8 List.head : [t] -> Optional t - 1029. -- #atruig2897q7u699k1u4ruou8epfb9qsok7ojkm5om67fhhaqgdi597jr7dvr09h9qndupc49obo4cccir98ei1grfehrcd5qhnkcq0 + 1056. -- #atruig2897q7u699k1u4ruou8epfb9qsok7ojkm5om67fhhaqgdi597jr7dvr09h9qndupc49obo4cccir98ei1grfehrcd5qhnkcq0 List.range : Nat -> Nat -> [Nat] - 1030. -- #marlqbcbculvqjfro3iidf899g2ncob2f8ld3gosg7kas5t9hlh341d49uh57ff5litvrt0hlb2ms7tj0mkfqs9do67cm4msodt8dng + 1057. -- #marlqbcbculvqjfro3iidf899g2ncob2f8ld3gosg7kas5t9hlh341d49uh57ff5litvrt0hlb2ms7tj0mkfqs9do67cm4msodt8dng List.reverse : [a] -> [a] - 1031. -- #30hfqasco93u0oipi7irfoabh5uofuu2aeplo2c87p4dg0386si6gvv715dbr21s4ftfquev4baj5ost3h17mt8fajn64mbffp6c8c0 + 1058. -- #30hfqasco93u0oipi7irfoabh5uofuu2aeplo2c87p4dg0386si6gvv715dbr21s4ftfquev4baj5ost3h17mt8fajn64mbffp6c8c0 List.unzip : [(a, b)] -> ([a], [b]) - 1032. -- #s8l7maltpsr01naqadvs5ssttg7eim4ca2096lbo3f3he1i1b11kk95ahtgb5ukb8cjr6kg4r4c1qrvshk9e8dp5fkq87254gc1pk48 + 1059. -- #s8l7maltpsr01naqadvs5ssttg7eim4ca2096lbo3f3he1i1b11kk95ahtgb5ukb8cjr6kg4r4c1qrvshk9e8dp5fkq87254gc1pk48 List.zip : [a] -> [b] -> [(a, b)] - 1033. -- #g6g6lhj9upe46032doaeo0ndu8lh1krfkc56gvupeg4a16me5vghhi6bthphnsvgtve9ogl73qab6d69ju6uorpj029g97pjg3p2k2o + 1060. -- #g6g6lhj9upe46032doaeo0ndu8lh1krfkc56gvupeg4a16me5vghhi6bthphnsvgtve9ogl73qab6d69ju6uorpj029g97pjg3p2k2o listen : Socket ->{IO, Exception} () - 1034. -- #ilva5f9uoaia9l8suc3hl9kh2bg1lah1k7uvm8mlq3mt0b9krdh15kurbhb9pu7a8irmvk6m2lpulg75a5alf0a95u0rp0v0n9folmg + 1061. -- #ilva5f9uoaia9l8suc3hl9kh2bg1lah1k7uvm8mlq3mt0b9krdh15kurbhb9pu7a8irmvk6m2lpulg75a5alf0a95u0rp0v0n9folmg loadCodeBytes : Bytes ->{Exception} Code - 1035. -- #tjj9c7fbprd57jlnndl8huslhvfbhi1bt1mr45v1fvvr2b3bguhnjtll3lbsbnqqjb290tm9cnuafpbtlfev1csbtjjog0r2kfv0e50 + 1062. -- #tjj9c7fbprd57jlnndl8huslhvfbhi1bt1mr45v1fvvr2b3bguhnjtll3lbsbnqqjb290tm9cnuafpbtlfev1csbtjjog0r2kfv0e50 loadSelfContained : Text ->{IO, Exception} a - 1036. -- #1pkgu9vbcdl57d9pn9ses1htmfokjq6212ed5oo9jscjkf8t2s407j71287hd9nr1shgsjmn0eunm5e7h262id4hh3t4op6barrvc70 + 1063. -- #1pkgu9vbcdl57d9pn9ses1htmfokjq6212ed5oo9jscjkf8t2s407j71287hd9nr1shgsjmn0eunm5e7h262id4hh3t4op6barrvc70 loadValueBytes : Bytes ->{IO, Exception} ([(Link.Term, Code)], Value) - 1037. -- #nk9jfsoidsc5h3nhcf1p6528t6c5hqui3hridbvaqnruel4jns3qo6plgups2sgi82c9jgt9ba1qlkum1bdjdgp75h7si2thbo7tcfg + 1064. -- #nk9jfsoidsc5h3nhcf1p6528t6c5hqui3hridbvaqnruel4jns3qo6plgups2sgi82c9jgt9ba1qlkum1bdjdgp75h7si2thbo7tcfg type Map k v type builtin.Map k v - 1038. -- #nk9jfsoidsc5h3nhcf1p6528t6c5hqui3hridbvaqnruel4jns3qo6plgups2sgi82c9jgt9ba1qlkum1bdjdgp75h7si2thbo7tcfg#0 + 1065. -- #nk9jfsoidsc5h3nhcf1p6528t6c5hqui3hridbvaqnruel4jns3qo6plgups2sgi82c9jgt9ba1qlkum1bdjdgp75h7si2thbo7tcfg#0 Map.Bin, builtin.Map.Bin : Nat -> k @@ -3745,71 +3870,71 @@ This transcript is intended to make visible accidental changes to the hashing al -> Map k v -> Map k v - 1039. -- #l10hise80kaqda2tsvkd6c6bsmd4cdvbi2hbk73bd79gpp6drt3496nhsd8mutbvijbmctdmqopcmdq9l650jtvvhcelci722rjolfg + 1066. -- #l10hise80kaqda2tsvkd6c6bsmd4cdvbi2hbk73bd79gpp6drt3496nhsd8mutbvijbmctdmqopcmdq9l650jtvvhcelci722rjolfg Map.get : k -> Map k v -> Optional v - 1040. -- #nk9jfsoidsc5h3nhcf1p6528t6c5hqui3hridbvaqnruel4jns3qo6plgups2sgi82c9jgt9ba1qlkum1bdjdgp75h7si2thbo7tcfg#1 + 1067. -- #nk9jfsoidsc5h3nhcf1p6528t6c5hqui3hridbvaqnruel4jns3qo6plgups2sgi82c9jgt9ba1qlkum1bdjdgp75h7si2thbo7tcfg#1 Map.Tip, builtin.Map.Tip : Map k v - 1041. -- #nqodnhhovq1ilb5fstpc61l8omfto62r8s0qq8s4ij39ulorqpgtinef64mullq0ns4914gck6obeuu6so1hds09hh5o1ptpt4k909g + 1068. -- #nqodnhhovq1ilb5fstpc61l8omfto62r8s0qq8s4ij39ulorqpgtinef64mullq0ns4914gck6obeuu6so1hds09hh5o1ptpt4k909g MVar.put : MVar i -> i ->{IO, Exception} () - 1042. -- #4ck8hqiu4m7478q5p7osqd1g9piie53g2v6j89en9s90f3cnhb9jr2515f35605e18ohiod7nb93t03765cil0lecob3hcsht9870g0 + 1069. -- #4ck8hqiu4m7478q5p7osqd1g9piie53g2v6j89en9s90f3cnhb9jr2515f35605e18ohiod7nb93t03765cil0lecob3hcsht9870g0 MVar.read : MVar o ->{IO, Exception} o - 1043. -- #tchse01rs4t1e6bk9br5ofad23ahlb9eanlv9nqqlk5eh7rv7qtpd5jmdjrcksm1q3uji64kqblrqq0vgap9tmak3urkr3ok4kg2ci0 + 1070. -- #tchse01rs4t1e6bk9br5ofad23ahlb9eanlv9nqqlk5eh7rv7qtpd5jmdjrcksm1q3uji64kqblrqq0vgap9tmak3urkr3ok4kg2ci0 MVar.swap : MVar o -> o ->{IO, Exception} o - 1044. -- #23nq5mshk51uktsg3su3mnkr9s4fe3sktf4q388bpsluiik64l8h060qptgfv48r25fcskecmc9t4gdsm8im9fhjf70i1klp34epksg + 1071. -- #23nq5mshk51uktsg3su3mnkr9s4fe3sktf4q388bpsluiik64l8h060qptgfv48r25fcskecmc9t4gdsm8im9fhjf70i1klp34epksg MVar.take : MVar o ->{IO, Exception} o - 1045. -- #18pqussken2f5u9vuall7ds58cf4fajoc4trf7p93vk4640ia88vsh2lgq9kgu8fvpr86518443ecvn7eo5tessq2hmgs55aiftui8g + 1072. -- #18pqussken2f5u9vuall7ds58cf4fajoc4trf7p93vk4640ia88vsh2lgq9kgu8fvpr86518443ecvn7eo5tessq2hmgs55aiftui8g newClient : ClientConfig -> Socket ->{IO, Exception} Tls - 1046. -- #mmoj281h8bimgcfqfpfg6mfriu8cta5vva4ppo41ioc6phegdfii26ic2s5sh0lf5tc6o15o7v79ui8eeh2mbicup07tl6hkrq9q34o + 1073. -- #mmoj281h8bimgcfqfpfg6mfriu8cta5vva4ppo41ioc6phegdfii26ic2s5sh0lf5tc6o15o7v79ui8eeh2mbicup07tl6hkrq9q34o newServer : ServerConfig -> Socket ->{IO, Exception} Tls - 1047. -- #r6l6s6ni7ut1b9le2d84el9dkhqjcjhodhd0l1qsksahm4cbgdk0odjck9jnku08v0pn909kabe2v88p43jisavkariomtgmtrrtbu8 + 1074. -- #r6l6s6ni7ut1b9le2d84el9dkhqjcjhodhd0l1qsksahm4cbgdk0odjck9jnku08v0pn909kabe2v88p43jisavkariomtgmtrrtbu8 openFile : Text -> FileMode ->{IO, Exception} Handle - 1048. -- #de42pjerlsm688s7llh6obrno8j5kq8rf5k931a5nq94o4475qi6ed0c5paqhem6aqi1e6th058qank01j7csc2sp7au9prhkjk31c8 + 1075. -- #de42pjerlsm688s7llh6obrno8j5kq8rf5k931a5nq94o4475qi6ed0c5paqhem6aqi1e6th058qank01j7csc2sp7au9prhkjk31c8 Optional.getOrBug : msg -> Optional a -> a - 1049. -- #c58qbcgd90d965dokk7bu82uehegkbe8jttm7lv4j0ohgi2qm3e3p4v1qfr8vc2dlsmsl9tv0v71kco8c18mneule0ntrhte4ks1090 + 1076. -- #c58qbcgd90d965dokk7bu82uehegkbe8jttm7lv4j0ohgi2qm3e3p4v1qfr8vc2dlsmsl9tv0v71kco8c18mneule0ntrhte4ks1090 printLine : Text ->{IO, Exception} () - 1050. -- #dck7pb7qv05ol3b0o76l88a22bc7enl781ton5qbs2umvgsua3p16n22il02m29592oohsnbt3cr7hnlumpdhv2ibjp6iji9te4iot0 + 1077. -- #dck7pb7qv05ol3b0o76l88a22bc7enl781ton5qbs2umvgsua3p16n22il02m29592oohsnbt3cr7hnlumpdhv2ibjp6iji9te4iot0 printText : Text ->{IO} Either Failure () - 1051. -- #5si7baedo99eap6jgd9krvt7q4ak8s98t4ushnno8mgjp7u9li137ferm3dn11g4k3mds1m8n33sbuodrohstbm9hcqm1937tfj7iq8 + 1078. -- #5si7baedo99eap6jgd9krvt7q4ak8s98t4ushnno8mgjp7u9li137ferm3dn11g4k3mds1m8n33sbuodrohstbm9hcqm1937tfj7iq8 putBytes : Handle -> Bytes ->{IO, Exception} () - 1052. -- #gkd4pi7uossfe12b19s0mrr0a04v5vvhnfmq3qer3cu7jr24m5v4e1qu59mktrornbrrqgihsvkj1f29je971oqimpngiqgebkr9i58 + 1079. -- #gkd4pi7uossfe12b19s0mrr0a04v5vvhnfmq3qer3cu7jr24m5v4e1qu59mktrornbrrqgihsvkj1f29je971oqimpngiqgebkr9i58 readFile : Text ->{IO, Exception} Bytes - 1053. -- #ak95mrmd6jhaiikkr42qsvd5lu7au0mpveqm1e347mkr7s4f846apqhh203ei1p3pqi18dcuhuotf53l8p2ivsjs8octc1eenjdqb48 + 1080. -- #ak95mrmd6jhaiikkr42qsvd5lu7au0mpveqm1e347mkr7s4f846apqhh203ei1p3pqi18dcuhuotf53l8p2ivsjs8octc1eenjdqb48 ready : Handle ->{IO, Exception} Boolean - 1054. -- #gpogpcuoc1dsktoh5t50ofl6dc4vulm0fsqoeevuuoivbrin87ah166b8k8vq3s3977ha0p7np5mn198gglqkjj1gh7nbv31eb7dbqo + 1081. -- #gpogpcuoc1dsktoh5t50ofl6dc4vulm0fsqoeevuuoivbrin87ah166b8k8vq3s3977ha0p7np5mn198gglqkjj1gh7nbv31eb7dbqo receive : Tls ->{IO, Exception} Bytes - 1055. -- #7rctbhido3s7lm9tjb6dit94cg2jofasr6div31976q840e5va5j6tu6p0pugkt106mcjrtiqndimaknakrnssdo6ul0jef6a9nf1qo + 1082. -- #7rctbhido3s7lm9tjb6dit94cg2jofasr6div31976q840e5va5j6tu6p0pugkt106mcjrtiqndimaknakrnssdo6ul0jef6a9nf1qo removeDirectory : Text ->{IO, Exception} () - 1056. -- #710k006oln987ch4k1c986sb0jfqtpusp0a235te6cejhns51um6umr311ltgfiv80kt0s8sb8r0ic63gj2nvgbi66vq10s4ilkk5ng + 1083. -- #710k006oln987ch4k1c986sb0jfqtpusp0a235te6cejhns51um6umr311ltgfiv80kt0s8sb8r0ic63gj2nvgbi66vq10s4ilkk5ng renameDirectory : Text -> Text ->{IO, Exception} () - 1057. -- #vb50tjb967ic3mr4brs0pro9819ftcj4q48eoeal8gmk02f05isuqhn0accbi7rv07g3i4hjgntu2b2r8b9bn15mjc59v10u9c3gjdo + 1084. -- #vb50tjb967ic3mr4brs0pro9819ftcj4q48eoeal8gmk02f05isuqhn0accbi7rv07g3i4hjgntu2b2r8b9bn15mjc59v10u9c3gjdo runTest : '{IO, TempDirs, Exception, Stream Result} a ->{IO} [Result] - 1058. -- #emt8oa7ee2hha5993870s292rk3muaf44m46ribq3959ps80u3msge1e9dp9p4vprqqnha588s8khqplpcatlqv5gmhuj11ek0abpfo + 1085. -- #emt8oa7ee2hha5993870s292rk3muaf44m46ribq3959ps80u3msge1e9dp9p4vprqqnha588s8khqplpcatlqv5gmhuj11ek0abpfo saveSelfContained : Optional Nat -> a -> Text ->{IO, Exception} () - 1059. -- #48nls8b5okebjcn689uk8bbo7nenitarsrpvmln9fh0s6mvpnt6slumbg46ofm061urucqeuq70lmkm1chu1b1tdbviid1fl4mriqb8 + 1086. -- #48nls8b5okebjcn689uk8bbo7nenitarsrpvmln9fh0s6mvpnt6slumbg46ofm061urucqeuq70lmkm1chu1b1tdbviid1fl4mriqb8 saveTestCase : Optional Nat -> Text -> Text @@ -3817,103 +3942,103 @@ This transcript is intended to make visible accidental changes to the hashing al -> a ->{IO, Exception} () - 1060. -- #uq87p0r1djq5clhkbimp3fc325e5kp3bv33dc8fpphotdqp95a0ps2c2ch8d2ftdpdualpq2oo9dmnka6kvnc9kvugs2538q62up4t0 + 1087. -- #uq87p0r1djq5clhkbimp3fc325e5kp3bv33dc8fpphotdqp95a0ps2c2ch8d2ftdpdualpq2oo9dmnka6kvnc9kvugs2538q62up4t0 seekHandle : Handle -> SeekMode -> Int ->{IO, Exception} () - 1061. -- #ftkuro0u0et9ahigdr1k38tl2sl7i0plm7cv5nciccdd71t6a64icla66ss0ufu7llfuj7cuvg3ms4ieel6penfi8gkahb9tm3sfhjo + 1088. -- #ftkuro0u0et9ahigdr1k38tl2sl7i0plm7cv5nciccdd71t6a64icla66ss0ufu7llfuj7cuvg3ms4ieel6penfi8gkahb9tm3sfhjo send : Tls -> Bytes ->{IO, Exception} () - 1062. -- #k6gmcn3qg50h49gealh8o7j7tp74rvhgn040kftsavd2cldqopcv9945olnooe04cqitgpvekpcbr5ccqjosg7r9gb1lagju5v9ln0o + 1089. -- #k6gmcn3qg50h49gealh8o7j7tp74rvhgn040kftsavd2cldqopcv9945olnooe04cqitgpvekpcbr5ccqjosg7r9gb1lagju5v9ln0o serverSocket : Optional Text -> Text ->{IO, Exception} Socket - 1063. -- #umje4ibrfv3c6vsjrdkbne1u7c8hg4ll9185m3frqr2rsr8738hp5fq12kepa28h63u9qi23stsegjp1hv0incr5djbl7ulp2s12d8g + 1090. -- #umje4ibrfv3c6vsjrdkbne1u7c8hg4ll9185m3frqr2rsr8738hp5fq12kepa28h63u9qi23stsegjp1hv0incr5djbl7ulp2s12d8g setBuffering : Handle -> BufferMode ->{IO, Exception} () - 1064. -- #je6s0pdkrg3mvphpg535pubchjd40mepki6ipum7498sma7pll9l89h6de65063bufihf2jb5ihepth2jahir8rs757ggfrnpp7fs7o + 1091. -- #je6s0pdkrg3mvphpg535pubchjd40mepki6ipum7498sma7pll9l89h6de65063bufihf2jb5ihepth2jahir8rs757ggfrnpp7fs7o setEcho : Handle -> Boolean ->{IO, Exception} () - 1065. -- #in06o7cfgnlmm6pvdtv0jv9hniahcli0fvh27o01ork1p77ro2v51rc05ts1h6p9mtffqld4ufs8klcc4bse1tsj93cu0na0bbiuqb0 + 1092. -- #in06o7cfgnlmm6pvdtv0jv9hniahcli0fvh27o01ork1p77ro2v51rc05ts1h6p9mtffqld4ufs8klcc4bse1tsj93cu0na0bbiuqb0 snd : (a1, a) -> a - 1066. -- #km3cpkvcnvcos0isfbnb7pb3s45ri5q42n74jmm9c4v1bcu8nlk63353u4ohfr7av4k00s4s180ddnqbam6a01thhlt2tie1hm5a9bo + 1093. -- #km3cpkvcnvcos0isfbnb7pb3s45ri5q42n74jmm9c4v1bcu8nlk63353u4ohfr7av4k00s4s180ddnqbam6a01thhlt2tie1hm5a9bo socketAccept : Socket ->{IO, Exception} Socket - 1067. -- #ubteu6e7h7om7o40e8mm1rcmp8uur7qn7p5d92gtp3q92rtr459nn3rff4i9q46o2o60tmh77i9vgu0pub768s9kvn9egtcds30nk88 + 1094. -- #ubteu6e7h7om7o40e8mm1rcmp8uur7qn7p5d92gtp3q92rtr459nn3rff4i9q46o2o60tmh77i9vgu0pub768s9kvn9egtcds30nk88 socketPort : Socket ->{IO, Exception} Nat - 1068. -- #3rp8h0dt7g60nrjdehuhqga9dmomti5rdqho7r1rm5rg5moet7kt3ieempo7c9urur752njachq6k48ggbic4ugbbv75jl2mfbk57a0 + 1095. -- #3rp8h0dt7g60nrjdehuhqga9dmomti5rdqho7r1rm5rg5moet7kt3ieempo7c9urur752njachq6k48ggbic4ugbbv75jl2mfbk57a0 startsWith : Text -> Text -> Boolean - 1069. -- #elsab3sc7p4c6bj73pgvklv0j7qu268rn5isv6micfp7ib8grjoustpqdq0pkd4a379mr5ijb8duu2q0n040osfurppp8pt8vaue2fo + 1096. -- #elsab3sc7p4c6bj73pgvklv0j7qu268rn5isv6micfp7ib8grjoustpqdq0pkd4a379mr5ijb8duu2q0n040osfurppp8pt8vaue2fo stdout : Handle - 1070. -- #rfi1v9429f9qluv533l2iba77aadttilrpmnhljfapfnfa6sru2nr8ibpqvib9nc4s4nb9s1as45upsfqfqe6ivqi2p82b2vd866it8 + 1097. -- #rfi1v9429f9qluv533l2iba77aadttilrpmnhljfapfnfa6sru2nr8ibpqvib9nc4s4nb9s1as45upsfqfqe6ivqi2p82b2vd866it8 structural ability Stream a - 1071. -- #s76vfp9t00khf3bvrg01h9u7gnqj5m62sere8ac97un79ojd82b71q2e0cllj002jn4r2g3qhjft40gkqotgor74v0iogkt3lfftlug + 1098. -- #s76vfp9t00khf3bvrg01h9u7gnqj5m62sere8ac97un79ojd82b71q2e0cllj002jn4r2g3qhjft40gkqotgor74v0iogkt3lfftlug Stream.collect : '{e, Stream a} r ->{e} ([a], r) - 1072. -- #abc5m7k74em3fk9et4lrj0ee2lsbvp8vp826josen26l1g3lh9ansb47b68efe1vhhi8f6l6kaircd5t4ihlbt0pq4nlipgde9rq8v8 + 1099. -- #abc5m7k74em3fk9et4lrj0ee2lsbvp8vp826josen26l1g3lh9ansb47b68efe1vhhi8f6l6kaircd5t4ihlbt0pq4nlipgde9rq8v8 Stream.collect.handler : Request {Stream a} r -> ([a], r) - 1073. -- #rfi1v9429f9qluv533l2iba77aadttilrpmnhljfapfnfa6sru2nr8ibpqvib9nc4s4nb9s1as45upsfqfqe6ivqi2p82b2vd866it8#0 + 1100. -- #rfi1v9429f9qluv533l2iba77aadttilrpmnhljfapfnfa6sru2nr8ibpqvib9nc4s4nb9s1as45upsfqfqe6ivqi2p82b2vd866it8#0 Stream.emit : a ->{Stream a} () - 1074. -- #5qq7800m2lf59snqmh6ns137k5a67tpvvs7oiuinu28933ff1mkmoub30nmanvk9ck1sddukhcpaa89bvrlm3oalomo2b8p0fgsk0p8 + 1101. -- #5qq7800m2lf59snqmh6ns137k5a67tpvvs7oiuinu28933ff1mkmoub30nmanvk9ck1sddukhcpaa89bvrlm3oalomo2b8p0fgsk0p8 Stream.toList : '{e, Stream a} r ->{e} [a] - 1075. -- #t3klufmrq2bk8gg0o4lukenlmu0dkkcssq9l80m4p3dm6rqesrt51nrebfujfgco9h47f4e5nplmj7rvc3salvs65labd7nvj2fkne8 + 1102. -- #t3klufmrq2bk8gg0o4lukenlmu0dkkcssq9l80m4p3dm6rqesrt51nrebfujfgco9h47f4e5nplmj7rvc3salvs65labd7nvj2fkne8 Stream.toList.handler : Request {Stream a} r -> [a] - 1076. -- #pus3urtj4e1bhv5p5l16d7vnv4g2hso78pcfussnufkt3d53j7oaqde1ajvijr1g6f0cv2c4ice34g8g8n17hd7hql6hvl8sgcgu6s8 + 1103. -- #pus3urtj4e1bhv5p5l16d7vnv4g2hso78pcfussnufkt3d53j7oaqde1ajvijr1g6f0cv2c4ice34g8g8n17hd7hql6hvl8sgcgu6s8 systemTime : '{IO, Exception} Nat - 1077. -- #11mhfqj6rts8lm3im7saf44tn3km5bboqtu1td0udnaiit4qqg6ar1ecmccosl6gufsnp6sug3vcmgapsc58sgj7dh7rg8msq2qkj18 + 1104. -- #11mhfqj6rts8lm3im7saf44tn3km5bboqtu1td0udnaiit4qqg6ar1ecmccosl6gufsnp6sug3vcmgapsc58sgj7dh7rg8msq2qkj18 structural ability TempDirs - 1078. -- #11mhfqj6rts8lm3im7saf44tn3km5bboqtu1td0udnaiit4qqg6ar1ecmccosl6gufsnp6sug3vcmgapsc58sgj7dh7rg8msq2qkj18#0 + 1105. -- #11mhfqj6rts8lm3im7saf44tn3km5bboqtu1td0udnaiit4qqg6ar1ecmccosl6gufsnp6sug3vcmgapsc58sgj7dh7rg8msq2qkj18#0 TempDirs.newTempDir : Text ->{TempDirs} Text - 1079. -- #11mhfqj6rts8lm3im7saf44tn3km5bboqtu1td0udnaiit4qqg6ar1ecmccosl6gufsnp6sug3vcmgapsc58sgj7dh7rg8msq2qkj18#1 + 1106. -- #11mhfqj6rts8lm3im7saf44tn3km5bboqtu1td0udnaiit4qqg6ar1ecmccosl6gufsnp6sug3vcmgapsc58sgj7dh7rg8msq2qkj18#1 TempDirs.removeDir : Text ->{TempDirs} () - 1080. -- #ibj0sc16l6bd7r6ptft93jeocitrjod98g210beogdk30t3tb127fbe33vau29j0j4gt8mbs2asfs5rslgk0fl3o4did2t9oa8o5kf8 + 1107. -- #ibj0sc16l6bd7r6ptft93jeocitrjod98g210beogdk30t3tb127fbe33vau29j0j4gt8mbs2asfs5rslgk0fl3o4did2t9oa8o5kf8 terminate : Tls ->{IO, Exception} () - 1081. -- #iis8ph5ljlq8ijd9jsdlsga91fh1354fii7955l4v52mnvn71cd76maculs0eathrmtfjqh0knbc600kmvq6abj4k2ntnbh5ee10m2o + 1108. -- #iis8ph5ljlq8ijd9jsdlsga91fh1354fii7955l4v52mnvn71cd76maculs0eathrmtfjqh0knbc600kmvq6abj4k2ntnbh5ee10m2o testAutoClean : '{IO} [Result] - 1082. -- #k1prgid1t9d4fu6f60rct978khcuinkpq49ps95aqaimt2tfoa77fc0c8i3pmc8toeth1s98al3nosaa1mhbh2j2k2nvqivm0ks963o + 1109. -- #k1prgid1t9d4fu6f60rct978khcuinkpq49ps95aqaimt2tfoa77fc0c8i3pmc8toeth1s98al3nosaa1mhbh2j2k2nvqivm0ks963o Text.fromUtf8 : Bytes ->{Exception} Text - 1083. -- #32q9jqhmi8f08pec3hj0je4u7k52f9f1hdfsmn9ncg2kpki5da9dabigplvdcot3a00k7s5npc4n78psd6ojaumqjla259e9pqd4ov8 + 1110. -- #32q9jqhmi8f08pec3hj0je4u7k52f9f1hdfsmn9ncg2kpki5da9dabigplvdcot3a00k7s5npc4n78psd6ojaumqjla259e9pqd4ov8 structural ability Throw e - 1084. -- #32q9jqhmi8f08pec3hj0je4u7k52f9f1hdfsmn9ncg2kpki5da9dabigplvdcot3a00k7s5npc4n78psd6ojaumqjla259e9pqd4ov8#0 + 1111. -- #32q9jqhmi8f08pec3hj0je4u7k52f9f1hdfsmn9ncg2kpki5da9dabigplvdcot3a00k7s5npc4n78psd6ojaumqjla259e9pqd4ov8#0 Throw.throw : e ->{Throw e} a - 1085. -- #f6pkvs6ukf8ngh2j8lm935p1bqadso76o7e3t0j1ukupjh1rg0m1rhtp7u492sq17p3bkbintbnjehc1cqs33qlhnfkoihf5uee4ug0 + 1112. -- #f6pkvs6ukf8ngh2j8lm935p1bqadso76o7e3t0j1ukupjh1rg0m1rhtp7u492sq17p3bkbintbnjehc1cqs33qlhnfkoihf5uee4ug0 uncurry : (i1 ->{g1} i ->{g} o) -> (i1, i) ->{g1, g} o - 1086. -- #u1o44hd0cdlfa8racf458sahdmgea409k8baajgc5k7bqukf2ak5ggs2ped0u3h85v99pgefgb9r7ct2dv4nn9eihjghnqf30p4l57g + 1113. -- #u1o44hd0cdlfa8racf458sahdmgea409k8baajgc5k7bqukf2ak5ggs2ped0u3h85v99pgefgb9r7ct2dv4nn9eihjghnqf30p4l57g Value.transitiveDeps : Value ->{IO} [(Link.Term, Code)] - 1087. -- #o5bg5el7ckak28ib98j5b6rt26bqbprpddd1brrg3s18qahhbbe3uohufjjnt5eenvtjg0hrvnvpra95jmdppqrovvmcfm1ih2k7guo + 1114. -- #o5bg5el7ckak28ib98j5b6rt26bqbprpddd1brrg3s18qahhbbe3uohufjjnt5eenvtjg0hrvnvpra95jmdppqrovvmcfm1ih2k7guo void : x -> () - 1088. -- #rl2hpic2qea96mbciilnbcnqo17d8l5kpkgfa0iesk7c1o292k9hoor4ui587vj9e3eeeemhv4fji1oc61sker4inis56jqn2bsbteg + 1115. -- #rl2hpic2qea96mbciilnbcnqo17d8l5kpkgfa0iesk7c1o292k9hoor4ui587vj9e3eeeemhv4fji1oc61sker4inis56jqn2bsbteg when : Boolean -> '{e} () ->{e} () - 1089. -- #b4pssu6mf30r4irqj43vvgbc6geq8pp7eg4o2erl948qp3nskp6io5damjj54o2eq9q76mrhsijr1q1d0bna4soed3oggddfvdajaj8 + 1116. -- #b4pssu6mf30r4irqj43vvgbc6geq8pp7eg4o2erl948qp3nskp6io5damjj54o2eq9q76mrhsijr1q1d0bna4soed3oggddfvdajaj8 writeFile : Text -> Bytes ->{IO, Exception} () - 1090. -- #lcmj2envm11lrflvvcl290lplhvbccv82utoej0lg0eomhmsf2vrv8af17k6if7ff98fp1b13rkseng3fng4stlr495c8dn3gn4k400 + 1117. -- #lcmj2envm11lrflvvcl290lplhvbccv82utoej0lg0eomhmsf2vrv8af17k6if7ff98fp1b13rkseng3fng4stlr495c8dn3gn4k400 |> : a -> (a ->{g} t) ->{g} t ``` diff --git a/unison-src/transcripts/idempotent/alias-term.md b/unison-src/transcripts/idempotent/alias-term.md index 806d00ba9d..92d8425ac4 100644 --- a/unison-src/transcripts/idempotent/alias-term.md +++ b/unison-src/transcripts/idempotent/alias-term.md @@ -12,7 +12,7 @@ > ls . 1. foo (a -> b) - 2. lib. (838 terms, 121 types) + 2. lib. (864 terms, 122 types) ``` It won't create a conflicted name, though. @@ -29,7 +29,7 @@ It won't create a conflicted name, though. > ls . 1. foo (a -> b) - 2. lib. (838 terms, 121 types) + 2. lib. (864 terms, 122 types) ``` You can use `debug.alias.term.force` for that. @@ -43,5 +43,5 @@ You can use `debug.alias.term.force` for that. 1. foo (a -> b) 2. foo (a -> b) - 3. lib. (838 terms, 121 types) + 3. lib. (864 terms, 122 types) ``` diff --git a/unison-src/transcripts/idempotent/alias-type.md b/unison-src/transcripts/idempotent/alias-type.md index 36328c1f62..2e26985a5b 100644 --- a/unison-src/transcripts/idempotent/alias-type.md +++ b/unison-src/transcripts/idempotent/alias-type.md @@ -12,7 +12,7 @@ > ls . 1. Foo (builtin type) - 2. lib. (838 terms, 121 types) + 2. lib. (864 terms, 122 types) ``` It won't create a conflicted name, though. @@ -29,7 +29,7 @@ It won't create a conflicted name, though. > ls . 1. Foo (builtin type) - 2. lib. (838 terms, 121 types) + 2. lib. (864 terms, 122 types) ``` You can use `debug.alias.type.force` for that. @@ -43,5 +43,5 @@ You can use `debug.alias.type.force` for that. 1. Foo (builtin type) 2. Foo (builtin type) - 3. lib. (838 terms, 121 types) + 3. lib. (864 terms, 122 types) ``` diff --git a/unison-src/transcripts/idempotent/branch-squash.md b/unison-src/transcripts/idempotent/branch-squash.md index df41888209..28d07afdcd 100644 --- a/unison-src/transcripts/idempotent/branch-squash.md +++ b/unison-src/transcripts/idempotent/branch-squash.md @@ -50,31 +50,31 @@ scratch/main> history Note: The most recent namespace hash is immediately below this message. - ⊙ 1. #fnj0stqh6g + ⊙ 1. #s9t33tj214 + Adds / updates: x - ⊙ 2. #mbmgtvli5m + ⊙ 2. #bot67o78do + Adds / updates: x - ⊙ 3. #q0o0hd9nt5 + ⊙ 3. #1ra4g2toic + Adds / updates: x - ⊙ 4. #07c7og75u8 + ⊙ 4. #rpktkqb6c9 + Adds / updates: x - □ 5. #ok139603jg (start of history) + □ 5. #vcqarvnndj (start of history) scratch/squashed> history @@ -83,5 +83,5 @@ scratch/squashed> history - □ 1. #f75c3n8sul (start of history) + □ 1. #tcocmb66da (start of history) ``` diff --git a/unison-src/transcripts/idempotent/builtins-merge.md b/unison-src/transcripts/idempotent/builtins-merge.md index 3fbdf70820..7f65f6d1b9 100644 --- a/unison-src/transcripts/idempotent/builtins-merge.md +++ b/unison-src/transcripts/idempotent/builtins-merge.md @@ -29,7 +29,7 @@ The `builtins.merge` command adds the known builtins to the specified subnamespa 20. Float. (38 terms) 21. Handle. (1 term) 22. ImmutableArray (builtin type) - 23. ImmutableArray. (3 terms) + 23. ImmutableArray. (19 terms) 24. ImmutableByteArray (builtin type) 25. ImmutableByteArray. (15 terms) 26. Int (builtin type) @@ -88,16 +88,18 @@ The `builtins.merge` command adds the known builtins to the specified subnamespa 79. Tuple (type) 80. Tuple. (1 term) 81. UDPSocket (builtin type) - 82. Unit (type) - 83. Unit. (1 term) - 84. Universal. (8 terms) - 85. Value (builtin type) - 86. Value. (6 terms) - 87. avro. (95 terms, 22 types) - 88. bug (a -> b) - 89. crypto. (17 terms, 2 types) - 90. io2. (157 terms, 32 types) - 91. metadata. (2 terms) - 92. todo (a -> b) - 93. unsafe. (1 term) + 82. UnboxedArray (builtin type) + 83. UnboxedArray. (10 terms) + 84. Unit (type) + 85. Unit. (1 term) + 86. Universal. (8 terms) + 87. Value (builtin type) + 88. Value. (6 terms) + 89. avro. (95 terms, 22 types) + 90. bug (a -> b) + 91. crypto. (17 terms, 2 types) + 92. io2. (157 terms, 32 types) + 93. metadata. (2 terms) + 94. todo (a -> b) + 95. unsafe. (1 term) ``` diff --git a/unison-src/transcripts/idempotent/emptyCodebase.md b/unison-src/transcripts/idempotent/emptyCodebase.md index c2e15b1524..5d7f1bc92a 100644 --- a/unison-src/transcripts/idempotent/emptyCodebase.md +++ b/unison-src/transcripts/idempotent/emptyCodebase.md @@ -21,7 +21,7 @@ Technically, the definitions all exist, but they have no names. `builtins.merge` > ls lib - 1. builtins. (665 terms, 103 types) + 1. builtins. (691 terms, 104 types) ``` And for a limited time, you can get even more builtin goodies: @@ -33,8 +33,8 @@ And for a limited time, you can get even more builtin goodies: > ls lib - 1. builtins. (665 terms, 103 types) - 2. builtinsio. (838 terms, 121 types) + 1. builtins. (691 terms, 104 types) + 2. builtinsio. (864 terms, 122 types) ``` More typically, you'd start out by pulling `base`. diff --git a/unison-src/transcripts/idempotent/fix1532.md b/unison-src/transcripts/idempotent/fix1532.md index bf0371ba8a..cb5181cc39 100644 --- a/unison-src/transcripts/idempotent/fix1532.md +++ b/unison-src/transcripts/idempotent/fix1532.md @@ -37,7 +37,7 @@ Let's see what we have created... > ls . 1. bar. (1 term) - 2. builtin. (665 terms, 103 types) + 2. builtin. (691 terms, 104 types) 3. foo. (2 terms) ``` diff --git a/unison-src/transcripts/idempotent/lib-install-local.md b/unison-src/transcripts/idempotent/lib-install-local.md index 0f2599908a..e85476bf73 100644 --- a/unison-src/transcripts/idempotent/lib-install-local.md +++ b/unison-src/transcripts/idempotent/lib-install-local.md @@ -35,7 +35,7 @@ myproject/main> lib.install.local scratch myproject/main> ls lib - 1. scratch_main. (667 terms, 104 types) + 1. scratch_main. (693 terms, 105 types) -- Can also specify a custom destination location @@ -45,8 +45,8 @@ myproject/main> lib.install.local scratch/main coolerscratch myproject/main> ls lib - 1. coolerscratch. (667 terms, 104 types) - 2. scratch_main. (667 terms, 104 types) + 1. coolerscratch. (693 terms, 105 types) + 2. scratch_main. (693 terms, 105 types) -- Installed libs should be squashed. diff --git a/unison-src/transcripts/idempotent/mcp.md b/unison-src/transcripts/idempotent/mcp.md index fcf04ab50b..a0e934e76f 100644 --- a/unison-src/transcripts/idempotent/mcp.md +++ b/unison-src/transcripts/idempotent/mcp.md @@ -195,7 +195,7 @@ RESPONSE: "result": { "content": [ { - "text": "{\"outputMessages\":[\"1. builtins. (838 terms, 121 types)\"],\"sourceCodeUpdates\":[]}", + "text": "{\"outputMessages\":[\"1. builtins. (864 terms, 122 types)\"],\"sourceCodeUpdates\":[]}", "type": "text" } ], diff --git a/unison-src/transcripts/idempotent/move-all.md b/unison-src/transcripts/idempotent/move-all.md index 479fda15f0..17dbdefcd9 100644 --- a/unison-src/transcripts/idempotent/move-all.md +++ b/unison-src/transcripts/idempotent/move-all.md @@ -75,7 +75,7 @@ scratch/main> ls . 1. Bar (Nat) 2. Bar (type) 3. Bar. (4 terms, 1 type) - 4. builtin. (665 terms, 103 types) + 4. builtin. (691 terms, 104 types) scratch/main> ls Bar @@ -134,7 +134,7 @@ z/main> move bonk zonk z/main> ls . - 1. builtin. (665 terms, 103 types) + 1. builtin. (691 terms, 104 types) 2. zonk (Nat) ``` @@ -171,7 +171,7 @@ a/main> move bonk zonk a/main> ls . - 1. builtin. (665 terms, 103 types) + 1. builtin. (691 terms, 104 types) 2. zonk. (1 term) a/main> view zonk.zonk diff --git a/unison-src/transcripts/idempotent/reflog.md b/unison-src/transcripts/idempotent/reflog.md index 331bc1480f..773f884a75 100644 --- a/unison-src/transcripts/idempotent/reflog.md +++ b/unison-src/transcripts/idempotent/reflog.md @@ -78,9 +78,9 @@ scratch/main> reflog history. Branch Hash Description - 1. scratch/main #k17no1qcvm update - 2. scratch/main #7o1u1kgf9o update - 3. scratch/main #99vt579ref builtins.merge scratch/main:lib.builtins + 1. scratch/main #0dnqh496gj update + 2. scratch/main #fgncppd98m update + 3. scratch/main #9nflma6kvc builtins.merge scratch/main:lib.builtins 4. scratch/main #sg60bvjo91 Project Created ``` @@ -97,11 +97,11 @@ scratch/main> project.reflog history. Branch Hash Description - 1. scratch/other #a6a96sui23 alias.term y scratch/other:z - 2. scratch/other #k17no1qcvm Branch created from scratch/main - 3. scratch/main #k17no1qcvm update - 4. scratch/main #7o1u1kgf9o update - 5. scratch/main #99vt579ref builtins.merge scratch/main:lib.builtins + 1. scratch/other #4m53sak68g alias.term y scratch/other:z + 2. scratch/other #0dnqh496gj Branch created from scratch/main + 3. scratch/main #0dnqh496gj update + 4. scratch/main #fgncppd98m update + 5. scratch/main #9nflma6kvc builtins.merge scratch/main:lib.builtins 6. scratch/main #sg60bvjo91 Project Created ``` @@ -118,13 +118,13 @@ scratch/main> reflog.global history. Branch Hash Description - 1. newproject/main #4fthib6tnj alias.term lib.builtins.Nat newproject/main:MyNat - 2. newproject/main #99vt579ref builtins.merge newproject/main:lib.builtins + 1. newproject/main #aaahhpcouk alias.term lib.builtins.Nat newproject/main:MyNat + 2. newproject/main #9nflma6kvc builtins.merge newproject/main:lib.builtins 3. newproject/main #sg60bvjo91 Branch Created - 4. scratch/other #a6a96sui23 alias.term y scratch/other:z - 5. scratch/other #k17no1qcvm Branch created from scratch/main - 6. scratch/main #k17no1qcvm update - 7. scratch/main #7o1u1kgf9o update - 8. scratch/main #99vt579ref builtins.merge scratch/main:lib.builtins + 4. scratch/other #4m53sak68g alias.term y scratch/other:z + 5. scratch/other #0dnqh496gj Branch created from scratch/main + 6. scratch/main #0dnqh496gj update + 7. scratch/main #fgncppd98m update + 8. scratch/main #9nflma6kvc builtins.merge scratch/main:lib.builtins 9. scratch/main #sg60bvjo91 Project Created ``` diff --git a/unison-src/transcripts/idempotent/reset.md b/unison-src/transcripts/idempotent/reset.md index ac31768347..cd3c06fb0e 100644 --- a/unison-src/transcripts/idempotent/reset.md +++ b/unison-src/transcripts/idempotent/reset.md @@ -37,19 +37,19 @@ scratch/main> history Note: The most recent namespace hash is immediately below this message. - ⊙ 1. #v9tohp24qa + ⊙ 1. #338cs4la0v + Adds / updates: def - ⊙ 2. #6qj752hs0h + ⊙ 2. #rvc9vrisf1 + Adds / updates: def - □ 3. #ok139603jg (start of history) + □ 3. #vcqarvnndj (start of history) scratch/main> reset 2 @@ -65,13 +65,13 @@ scratch/main> history Note: The most recent namespace hash is immediately below this message. - ⊙ 1. #6qj752hs0h + ⊙ 1. #rvc9vrisf1 + Adds / updates: def - □ 2. #ok139603jg (start of history) + □ 2. #vcqarvnndj (start of history) ``` Can reset to a value from reflog by number. @@ -87,10 +87,10 @@ scratch/main> reflog history. Branch Hash Description - 1. scratch/main #6qj752hs0h reset 6qj752hs0huvgdps82eie3hlmgjomc40rmqp4orlrpf90a450fiv2c... - 2. scratch/main #v9tohp24qa update - 3. scratch/main #6qj752hs0h update - 4. scratch/main #ok139603jg builtins.merge + 1. scratch/main #rvc9vrisf1 reset rvc9vrisf108urlb3ar443bnoc0abqmlfa9kiud9p0usegqrigeajl... + 2. scratch/main #338cs4la0v update + 3. scratch/main #rvc9vrisf1 update + 4. scratch/main #vcqarvnndj builtins.merge 5. scratch/main #sg60bvjo91 Project Created -- Reset the current branch to the first history element @@ -109,19 +109,19 @@ scratch/main> history Note: The most recent namespace hash is immediately below this message. - ⊙ 1. #v9tohp24qa + ⊙ 1. #338cs4la0v + Adds / updates: def - ⊙ 2. #6qj752hs0h + ⊙ 2. #rvc9vrisf1 + Adds / updates: def - □ 3. #ok139603jg (start of history) + □ 3. #vcqarvnndj (start of history) ``` # reset branch diff --git a/unison-src/transcripts/idempotent/undo.md b/unison-src/transcripts/idempotent/undo.md index 7bde3aa718..abd5cde110 100644 --- a/unison-src/transcripts/idempotent/undo.md +++ b/unison-src/transcripts/idempotent/undo.md @@ -20,7 +20,7 @@ scratch/main> add scratch/main> ls . - 1. lib. (665 terms, 103 types) + 1. lib. (691 terms, 104 types) 2. x (Nat) scratch/main> alias.term x y @@ -29,7 +29,7 @@ scratch/main> alias.term x y scratch/main> ls . - 1. lib. (665 terms, 103 types) + 1. lib. (691 terms, 104 types) 2. x (Nat) 3. y (Nat) @@ -38,7 +38,7 @@ scratch/main> history Note: The most recent namespace hash is immediately below this message. - ⊙ 1. #3guh775vf7 + ⊙ 1. #7qfqrn7ja6 + Adds / updates: @@ -49,13 +49,13 @@ scratch/main> history Original name New name(s) x y - ⊙ 2. #7o1u1kgf9o + ⊙ 2. #fgncppd98m + Adds / updates: x - □ 3. #99vt579ref (start of history) + □ 3. #9nflma6kvc (start of history) scratch/main> undo @@ -68,7 +68,7 @@ scratch/main> undo scratch/main> ls . - 1. lib. (665 terms, 103 types) + 1. lib. (691 terms, 104 types) 2. x (Nat) scratch/main> history @@ -76,13 +76,13 @@ scratch/main> history Note: The most recent namespace hash is immediately below this message. - ⊙ 1. #7o1u1kgf9o + ⊙ 1. #fgncppd98m + Adds / updates: x - □ 2. #99vt579ref (start of history) + □ 2. #9nflma6kvc (start of history) ``` ----- @@ -107,7 +107,7 @@ scratch/branch1> add scratch/branch1> ls . - 1. lib. (665 terms, 103 types) + 1. lib. (691 terms, 104 types) 2. x (Nat) scratch/branch1> alias.term x y @@ -116,7 +116,7 @@ scratch/branch1> alias.term x y scratch/branch1> ls . - 1. lib. (665 terms, 103 types) + 1. lib. (691 terms, 104 types) 2. x (Nat) 3. y (Nat) @@ -125,7 +125,7 @@ scratch/branch1> history Note: The most recent namespace hash is immediately below this message. - ⊙ 1. #3guh775vf7 + ⊙ 1. #7qfqrn7ja6 + Adds / updates: @@ -136,13 +136,13 @@ scratch/branch1> history Original name New name(s) x y - ⊙ 2. #7o1u1kgf9o + ⊙ 2. #fgncppd98m + Adds / updates: x - □ 3. #99vt579ref (start of history) + □ 3. #9nflma6kvc (start of history) -- Make some changes on an unrelated branch @@ -165,7 +165,7 @@ scratch/branch1> undo scratch/branch1> ls . - 1. lib. (665 terms, 103 types) + 1. lib. (691 terms, 104 types) 2. x (Nat) scratch/branch1> history @@ -173,13 +173,13 @@ scratch/branch1> history Note: The most recent namespace hash is immediately below this message. - ⊙ 1. #7o1u1kgf9o + ⊙ 1. #fgncppd98m + Adds / updates: x - □ 2. #99vt579ref (start of history) + □ 2. #9nflma6kvc (start of history) ``` ----- diff --git a/unison-src/transcripts/idempotent/upgrade.md b/unison-src/transcripts/idempotent/upgrade.md index 311490d3fe..36aee0e2c7 100644 --- a/unison-src/transcripts/idempotent/upgrade.md +++ b/unison-src/transcripts/idempotent/upgrade.md @@ -58,7 +58,7 @@ proj/main> upgrade old new proj/main> ls lib - 1. builtin. (665 terms, 103 types) + 1. builtin. (691 terms, 104 types) 2. new. (1 term) proj/main> view thingy @@ -176,7 +176,7 @@ proj/main> view thingy proj/main> ls lib - 1. builtin. (665 terms, 103 types) + 1. builtin. (691 terms, 104 types) 2. new. (1 term) proj/main> branches @@ -285,12 +285,12 @@ proj/upgrade-old-to-new> update proj/main> ls lib - 1. builtin. (665 terms, 103 types) + 1. builtin. (691 terms, 104 types) 2. new. (1 term) proj/main> ls . - 1. lib. (666 terms, 103 types) + 1. lib. (692 terms, 104 types) 2. thingy (Int) proj/main> branches @@ -539,7 +539,7 @@ scratch/main> upgrade dep dep__2 scratch/main> ls lib - 1. builtin. (665 terms, 103 types) + 1. builtin. (691 terms, 104 types) 2. dep. (1 term) ``` @@ -583,7 +583,7 @@ scratch/main> upgrade hello dep__2 scratch/main> ls lib - 1. builtin. (665 terms, 103 types) + 1. builtin. (691 terms, 104 types) 2. dep. (1 term) 3. dep__2. (1 term) ``` From 30763b850b3aa67babb91a604d8d514a3721b8a1 Mon Sep 17 00:00:00 2001 From: Dan Doel Date: Tue, 30 Sep 2025 18:24:40 -0400 Subject: [PATCH 9/9] Add array op smoke tests, fix some bugs with the operations --- parser-typechecker/src/Unison/Builtin.hs | 2 +- unison-runtime/src/Unison/Runtime/Array.hs | 5 +- unison-runtime/src/Unison/Runtime/Builtin.hs | 2 +- .../src/Unison/Runtime/Foreign/Function.hs | 29 +- .../Unison/Runtime/Foreign/Function/Type.hs | 4 +- .../transcripts/idempotent/array-ops.md | 345 ++++++++++++++++++ 6 files changed, 365 insertions(+), 22 deletions(-) create mode 100644 unison-src/transcripts/idempotent/array-ops.md diff --git a/parser-typechecker/src/Unison/Builtin.hs b/parser-typechecker/src/Unison/Builtin.hs index 5fe0f782f5..c7ca8c6dfe 100644 --- a/parser-typechecker/src/Unison/Builtin.hs +++ b/parser-typechecker/src/Unison/Builtin.hs @@ -818,7 +818,7 @@ builtinsSrc = list (pair a (pair b c)) --> iarrayt b, B "ImmutableArray.intersectIx" $ forall1 "a" $ \a -> - list a --> list a --> tuple [uarrayt nat, uarrayt nat], + iarrayt a --> iarrayt a --> tuple [uarrayt nat, uarrayt nat], B "ImmutableArray.murmurHashesUntyped" $ forall1 "a" $ \a -> iarrayt a --> uarrayt nat, diff --git a/unison-runtime/src/Unison/Runtime/Array.hs b/unison-runtime/src/Unison/Runtime/Array.hs index 394d12b189..4f109b24a1 100644 --- a/unison-runtime/src/Unison/Runtime/Array.hs +++ b/unison-runtime/src/Unison/Runtime/Array.hs @@ -446,12 +446,11 @@ arrayMap :: PrimMonad m => (a -> m b) -> PA.Array a -> m (Array b) arrayMap f ia = do oa <- PA.newArray sz (error "arrayMap: dummy value") let go n - | n <= sz = pure () - | otherwise = do + | n < sz = do PA.writeArray oa n =<< f (PA.indexArray ia n) go (n+1) + | otherwise = PA.unsafeFreezeArray oa go 0 - PA.unsafeFreezeArray oa where sz = PA.sizeofArray ia {-# INLINE arrayMap #-} diff --git a/unison-runtime/src/Unison/Runtime/Builtin.hs b/unison-runtime/src/Unison/Runtime/Builtin.hs index 567e4bb722..0c05c73224 100644 --- a/unison-runtime/src/Unison/Runtime/Builtin.hs +++ b/unison-runtime/src/Unison/Runtime/Builtin.hs @@ -1429,7 +1429,7 @@ declareForeigns = do declareForeign Untracked 1 ImmutableArray_runsIx declareForeign Untracked 1 ImmutableArray_toList declareForeign Untracked 1 ImmutableArray_toLists - declareForeign Untracked 2 ImmutableArray_zipAppend + declareForeign Untracked 2 ImmutableArray_zipWithAppend declareForeign Untracked 1 ImmutableArray_sortIx declareForeign Untracked 1 UnboxedArray_fromNatList declareForeign Untracked 2 UnboxedArray_modR diff --git a/unison-runtime/src/Unison/Runtime/Foreign/Function.hs b/unison-runtime/src/Unison/Runtime/Foreign/Function.hs index 95db25fb35..bcadd138fe 100644 --- a/unison-runtime/src/Unison/Runtime/Foreign/Function.hs +++ b/unison-runtime/src/Unison/Runtime/Foreign/Function.hs @@ -789,7 +789,7 @@ foreignCallHelper = \case ImmutableArray_pick1 -> mkForeignExn pick1 ImmutableArray_pick1Or -> mkForeignExn pick1Or ImmutableArray_sortIx -> mkForeign sortIx - ImmutableArray_zipAppend -> mkForeign $ + ImmutableArray_zipWithAppend -> mkForeign $ \(l :: PA.Array Val, r :: PA.Array Val) -> do let sz = min (PA.sizeofArray l) (PA.sizeofArray r) dst <- PA.newArray sz emptyVal @@ -798,7 +798,7 @@ foreignCallHelper = \case (SeqVal sl, SeqVal sr) -> do PA.writeArray dst i (SeqVal $ sl <> sr) fill (i+1) - _ -> die [] "ImmutableArray.zipAppend: non-list elements" + _ -> die [] "ImmutableArray.zipWithAppend: non-list elements" | otherwise = PA.unsafeFreezeArray dst fill 0 ImmutableArray_runsIx -> mkForeign collectRuns @@ -819,7 +819,7 @@ foreignCallHelper = \case UnboxedArray_divideR -> mkForeign $ \(PA.NArr arr, n) -> PA.NArr <$> PA.primArrayMap (pure . (`div` n)) arr UnboxedArray_size -> mkForeign $ \(PA.NArr arr) -> - evaluate $ PA.sizeofPrimArray arr + evaluate . fromIntegral @Int @Word64 $ PA.sizeofPrimArray arr UnboxedArray_toList -> mkForeign $ \(PA.NArr src) -> pure . fmap NatVal $ PA.primArrayToSeq src UnboxedArray_occurrences -> mkForeign occurrences @@ -1839,19 +1839,20 @@ pick1Or (dflt, PA.NArr ixs, src) = do msg = "ImmutableArray.pick: index out of bounds" upick1Or :: - (PA.SomePrimArr, PA.SomePrimArr) -> + (Word64, PA.SomePrimArr, PA.SomePrimArr) -> IO (Either (F.Failure (PA.SomePrimArr, Val)) PA.SomePrimArr) -upick1Or (PA.NArr ixs, src0@(PA.NArr src)) = do +upick1Or (df, PA.NArr ixs, src0@(PA.NArr src)) = do dst <- PA.newPrimArray szi let fill j | j < szi = case PA.indexPrimArray ixs j of ix0 - | ix0 == 0 -> fill (j+1) | ix <- fromIntegral ix0, - 0 < ix, ix <= szs -> do + 0 <= ix, ix <= szs -> do PA.writePrimArray dst j $ - PA.indexPrimArray src (ix - 1) + if ix0 == 0 + then df + else PA.indexPrimArray src (ix - 1) fill (j+1) | otherwise -> badIndex ix0 | otherwise = Right . PA.NArr <$> PA.unsafeFreezePrimArray dst @@ -1967,18 +1968,16 @@ chopArr (PA.NArr ixs, PA.NArr lens, src) isz = PA.sizeofPrimArray ixs ssz = PA.sizeofArray src - slice i n arr - | i >= n = PA.unsafeFreezeArray arr - | otherwise = do - PA.writeArray arr i (PA.indexArray src i) - slice (i+1) n arr + slice i n arr = do + PA.copyArray arr 0 src i n + PA.unsafeFreezeArray arr slices i arr | i >= isz = Right <$> PA.unsafeFreezeArray arr | ix <- fromIntegral $ PA.indexPrimArray ixs i, ln <- fromIntegral $ PA.indexPrimArray lens i = do PA.writeArray arr i . encodeVal @(PA.Array Val) - =<< slice ix (ix+ln) + =<< slice ix ln =<< PA.newArray ln emptyVal slices (i+1) arr @@ -1986,7 +1985,7 @@ chopArr (PA.NArr ixs, PA.NArr lens, src) | i >= isz = PA.newArray isz emptyVal >>= slices 0 | ix <- PA.indexPrimArray ixs i, ln <- PA.indexPrimArray lens i, - ix + ln >= fromIntegral ssz = + ix + ln > fromIntegral ssz = pure . Left $ F.Failure Ty.arrayFailureRef diff --git a/unison-runtime/src/Unison/Runtime/Foreign/Function/Type.hs b/unison-runtime/src/Unison/Runtime/Foreign/Function/Type.hs index c2a592247d..88a1a50d03 100644 --- a/unison-runtime/src/Unison/Runtime/Foreign/Function/Type.hs +++ b/unison-runtime/src/Unison/Runtime/Foreign/Function/Type.hs @@ -379,7 +379,7 @@ data ForeignFunc | ImmutableArray_runsIx | ImmutableArray_toList | ImmutableArray_toLists - | ImmutableArray_zipAppend + | ImmutableArray_zipWithAppend | ImmutableArray_sortIx | UnboxedArray_fromNatList | UnboxedArray_modR @@ -761,7 +761,7 @@ foreignFuncBuiltinName = \case ImmutableArray_pick -> "ImmutableArray.pick" ImmutableArray_pick1 -> "ImmutableArray.pick1" ImmutableArray_pick1Or -> "ImmutableArray.pick1Or" - ImmutableArray_zipAppend -> "ImmutableArray.zipAppend" + ImmutableArray_zipWithAppend -> "ImmutableArray.zipWithAppend" ImmutableArray_runsIx -> "ImmutableArray.runsIx" ImmutableArray_toList -> "ImmutableArray.toList" ImmutableArray_toLists -> "ImmutableArray.toLists" diff --git a/unison-src/transcripts/idempotent/array-ops.md b/unison-src/transcripts/idempotent/array-ops.md new file mode 100644 index 0000000000..d3dda31cbe --- /dev/null +++ b/unison-src/transcripts/idempotent/array-ops.md @@ -0,0 +1,345 @@ +``` ucm :hide +> builtins.mergeio +``` + +This transcript tests the bulk array builtins against their original +specs. The examples in the spec are usually very nice cases, so this is +not the most thorough test of their behavior. It is, rather, more of a +smoke test to make sure they aren't completely broken. + +``` unison +run! : '{Exception} a -> a +run! th = handle !th with cases + { a } -> a + { raise (Failure _ msg _) -> _ } -> bug msg + +psort : ImmutableArray a -> ImmutableArray a +psort a = run! do pick (sortIx a) a + +> at1s (fromList [(1, "a"), (2, "b"), (3, "c")]) +> at1s (fromList [("x", true), ("y", false)]) + +> at2s (fromList [(1, 2, 3), (4, 5, 6)]) +> at2s (fromList [("a", "b", "c"), ("d", "e", "f")]) + +> run! do + chop (fromNatList [0, 3, 5]) + (fromNatList [2, 2, 3]) + (fromList [1,2,3,4,5,6,7,8]) + +> run! do + chop (fromNatList [0, 4]) + (fromNatList [4, 2]) + (fromList ["a", "b", "c", "d", "e", "f"]) + +> fromListAt1 [(1, "a"), (2, "b"), (3, "c")] +> fromListAt1 [(true, 10), (false, 20)] + +> fromListAt2 [(1, 2, 3), (4, 5, 6)] +> fromListAt2 [("x", "y", "z"), ("a", "b", "c")] + +> ImmutableArray.fromList [1, 2, 3, 4] +> ImmutableArray.fromList ["a", "b", "c"] + +> intersectIx (fromList [1, 2, 3]) (fromList [2, 3, 4]) +> intersectIx (fromList ["a", "b"]) (fromList ["b", "c"]) + +> murmurHashesUntyped (fromList [1, 2, 3]) +> fromNatList (List.map murmurHashUntyped [1, 2, 3]) + +> outerJoinIx (fromList [1, 2, 3]) (fromList [2, 3, 4]) +> outerJoinIx (fromList ["a", "b"]) (fromList ["b", "c"]) + +> run! do ImmutableArray.pick (fromNatList [0, 2, 1]) (fromList ["a", "b", "c"]) +> run! do ImmutableArray.pick (fromNatList [3, 0, 3]) (fromList [10, 20, 30, 40]) + +> run! do ImmutableArray.pick1 (fromNatList [1,0,3,2]) (fromList ["a", "b", "c"]) +> run! do ImmutableArray.pick1 (fromNatList [2,1,0,2]) (fromList [10, 20, 30]) + +> run! do ImmutableArray.pick1Or "X" (fromNatList [1,0,2,0]) (fromList ["a", "b", "c"]) +> run! do ImmutableArray.pick1Or 99 (fromNatList [0,3,0,1]) (fromList [10, 20, 30]) + +> runsIx (fromList [1,1,1,2,2,3,1,1]) +> runsIx (fromList ["a","a","b","b","b","c"]) + +> sortIx (fromList [3,1,2]) +> sortIx (fromList ["c", "a", "b") + +> psort (fromList [3,1,2]) + +> psort (fromList ["c","a","b"]) + +> toLists (fromList [fromList [1,2], fromList [3,4,5], fromList [6]]) +> toLists (fromList [fromList ["a"], fromList ["b", "c"]) + +> ImmutableArray.toList (fromList [1,2,3,4]) +> ImmutableArray.toList (fromList ["x", "y", "z"]) + +> zipWithAppend (fromList [[1,2], [3]]) (fromList [[4], [5,6]]) +> zipWithAppend (fromList [["a"], ["b"]]) (fromList [["c", "d"], ["e"]]) + +> fromNatList [0,1,2,3] +> fromNatList [100, 200, 300] + +> modR (fromNatList [10, 11, 12, 13]) 3 +> modR (fromNatList [5, 10, 15, 20]) 7 + +> multiplyR (fromNatList [1, 2, 3, 4]) 5 +> multiplyR (fromNatList [7, 8, 9]) 3 + +> divideR (fromNatList [10, 15, 20, 25]) 5 +> divideR (fromNatList [21, 24, 27]) 3 + +> occurrences (fromNatList [0, 2, 1, 2, 0]) +> occurrences (fromNatList [3, 0, 3, 3]) + +> run! do pick (fromNatList [0, 2, 1]) (fromNatList [10, 20, 30]) +> run! do pick1 (fromNatList [1,0,2,1]) (fromNatList [10,20,30]) +> run! do pick1Or 99 (fromNatList [1,0,2,0]) (fromNatList [10,20,30]) + +> size (fromNatList [1,2,3,4,5]) +> size (fromNatList []) + +> toList (fromNatList [1,2,3]) +``` + +``` ucm :added-by-ucm + Loading changes detected in scratch.u. + + + psort : ImmutableArray a -> ImmutableArray a + + run! : '{Exception} a -> a + + Run `update` to apply these changes to your codebase. + + 9 | > at1s (fromList [(1, "a"), (2, "b"), (3, "c")]) + ⧩ + ImmutableArray.fromList [1, 2, 3] + + 10 | > at1s (fromList [("x", true), ("y", false)]) + ⧩ + ImmutableArray.fromList ["x", "y"] + + 12 | > at2s (fromList [(1, 2, 3), (4, 5, 6)]) + ⧩ + ImmutableArray.fromList [2, 5] + + 13 | > at2s (fromList [("a", "b", "c"), ("d", "e", "f")]) + ⧩ + ImmutableArray.fromList ["b", "e"] + + 15 | > run! do + ⧩ + ImmutableArray.fromList + [ ImmutableArray.fromList [1, 2] + , ImmutableArray.fromList [4, 5] + , ImmutableArray.fromList [6, 7, 8] + ] + + 20 | > run! do + ⧩ + ImmutableArray.fromList + [ ImmutableArray.fromList ["a", "b", "c", "d"] + , ImmutableArray.fromList ["e", "f"] + ] + + 25 | > fromListAt1 [(1, "a"), (2, "b"), (3, "c")] + ⧩ + ImmutableArray.fromList [1, 2, 3] + + 26 | > fromListAt1 [(true, 10), (false, 20)] + ⧩ + ImmutableArray.fromList [true, false] + + 28 | > fromListAt2 [(1, 2, 3), (4, 5, 6)] + ⧩ + ImmutableArray.fromList [2, 5] + + 29 | > fromListAt2 [("x", "y", "z"), ("a", "b", "c")] + ⧩ + ImmutableArray.fromList ["y", "b"] + + 31 | > ImmutableArray.fromList [1, 2, 3, 4] + ⧩ + ImmutableArray.fromList [1, 2, 3, 4] + + 32 | > ImmutableArray.fromList ["a", "b", "c"] + ⧩ + ImmutableArray.fromList ["a", "b", "c"] + + 34 | > intersectIx (fromList [1, 2, 3]) (fromList [2, 3, 4]) + ⧩ + (fromNatList [1, 2], fromNatList [0, 1]) + + 35 | > intersectIx (fromList ["a", "b"]) (fromList ["b", "c"]) + ⧩ + (fromNatList [1], fromNatList [0]) + + 37 | > murmurHashesUntyped (fromList [1, 2, 3]) + ⧩ + fromNatList + [ 12377779861971637790 + , 2071518504945439519 + , 1857633277936041700 + ] + + 38 | > fromNatList (List.map murmurHashUntyped [1, 2, 3]) + ⧩ + fromNatList + [ 12377779861971637790 + , 2071518504945439519 + , 1857633277936041700 + ] + + 40 | > outerJoinIx (fromList [1, 2, 3]) (fromList [2, 3, 4]) + ⧩ + (fromNatList [1, 2, 3, 0], fromNatList [0, 1, 2, 3]) + + 41 | > outerJoinIx (fromList ["a", "b"]) (fromList ["b", "c"]) + ⧩ + (fromNatList [1, 2, 0], fromNatList [0, 1, 2]) + + 43 | > run! do ImmutableArray.pick (fromNatList [0, 2, 1]) (fromList ["a", "b", "c"]) + ⧩ + ImmutableArray.fromList ["a", "c", "b"] + + 44 | > run! do ImmutableArray.pick (fromNatList [3, 0, 3]) (fromList [10, 20, 30, 40]) + ⧩ + ImmutableArray.fromList [40, 10, 40] + + 46 | > run! do ImmutableArray.pick1 (fromNatList [1,0,3,2]) (fromList ["a", "b", "c"]) + ⧩ + ImmutableArray.fromList ["a", "c", "b"] + + 47 | > run! do ImmutableArray.pick1 (fromNatList [2,1,0,2]) (fromList [10, 20, 30]) + ⧩ + ImmutableArray.fromList [20, 10, 20] + + 49 | > run! do ImmutableArray.pick1Or "X" (fromNatList [1,0,2,0]) (fromList ["a", "b", "c"]) + ⧩ + ImmutableArray.fromList ["a", "X", "b", "X"] + + 50 | > run! do ImmutableArray.pick1Or 99 (fromNatList [0,3,0,1]) (fromList [10, 20, 30]) + ⧩ + ImmutableArray.fromList [99, 30, 99, 10] + + 52 | > runsIx (fromList [1,1,1,2,2,3,1,1]) + ⧩ + (fromNatList [0, 3, 5, 6], fromNatList [3, 2, 1, 2]) + + 53 | > runsIx (fromList ["a","a","b","b","b","c"]) + ⧩ + (fromNatList [0, 2, 5], fromNatList [2, 3, 1]) + + 55 | > sortIx (fromList [3,1,2]) + ⧩ + fromNatList [1, 2, 0] + + 56 | > sortIx (fromList ["c", "a", "b") + ⧩ + fromNatList [1, 2, 0] + + 58 | > psort (fromList [3,1,2]) + ⧩ + ImmutableArray.fromList [1, 2, 3] + + 60 | > psort (fromList ["c","a","b"]) + ⧩ + ImmutableArray.fromList ["a", "b", "c"] + + 62 | > toLists (fromList [fromList [1,2], fromList [3,4,5], fromList [6]]) + ⧩ + ImmutableArray.fromList [[1, 2], [3, 4, 5], [6]] + + 63 | > toLists (fromList [fromList ["a"], fromList ["b", "c"]) + ⧩ + ImmutableArray.fromList [["a"], ["b", "c"]] + + 65 | > ImmutableArray.toList (fromList [1,2,3,4]) + ⧩ + [1, 2, 3, 4] + + 66 | > ImmutableArray.toList (fromList ["x", "y", "z"]) + ⧩ + ["x", "y", "z"] + + 68 | > zipWithAppend (fromList [[1,2], [3]]) (fromList [[4], [5,6]]) + ⧩ + ImmutableArray.fromList [[1, 2, 4], [3, 5, 6]] + + 69 | > zipWithAppend (fromList [["a"], ["b"]]) (fromList [["c", "d"], ["e"]]) + ⧩ + ImmutableArray.fromList [["a", "c", "d"], ["b", "e"]] + + 71 | > fromNatList [0,1,2,3] + ⧩ + fromNatList [0, 1, 2, 3] + + 72 | > fromNatList [100, 200, 300] + ⧩ + fromNatList [100, 200, 300] + + 74 | > modR (fromNatList [10, 11, 12, 13]) 3 + ⧩ + fromNatList [1, 2, 0, 1] + + 75 | > modR (fromNatList [5, 10, 15, 20]) 7 + ⧩ + fromNatList [5, 3, 1, 6] + + 77 | > multiplyR (fromNatList [1, 2, 3, 4]) 5 + ⧩ + fromNatList [5, 10, 15, 20] + + 78 | > multiplyR (fromNatList [7, 8, 9]) 3 + ⧩ + fromNatList [21, 24, 27] + + 80 | > divideR (fromNatList [10, 15, 20, 25]) 5 + ⧩ + fromNatList [2, 3, 4, 5] + + 81 | > divideR (fromNatList [21, 24, 27]) 3 + ⧩ + fromNatList [7, 8, 9] + + 83 | > occurrences (fromNatList [0, 2, 1, 2, 0]) + ⧩ + ImmutableArray.fromList + [ fromNatList [0, 4] + , fromNatList [2] + , fromNatList [1, 3] + ] + + 84 | > occurrences (fromNatList [3, 0, 3, 3]) + ⧩ + ImmutableArray.fromList + [ fromNatList [1] + , fromNatList [] + , fromNatList [] + , fromNatList [0, 2, 3] + ] + + 86 | > run! do pick (fromNatList [0, 2, 1]) (fromNatList [10, 20, 30]) + ⧩ + fromNatList [10, 30, 20] + + 87 | > run! do pick1 (fromNatList [1,0,2,1]) (fromNatList [10,20,30]) + ⧩ + fromNatList [10, 20, 10] + + 88 | > run! do pick1Or 99 (fromNatList [1,0,2,0]) (fromNatList [10,20,30]) + ⧩ + fromNatList [10, 99, 20, 99] + + 90 | > size (fromNatList [1,2,3,4,5]) + ⧩ + 5 + + 91 | > size (fromNatList []) + ⧩ + 0 + + 93 | > toList (fromNatList [1,2,3]) + ⧩ + [1, 2, 3] +```