+%/p      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmno Safe-Inferredpqrstupqrstupqrstu Safe-Inferred mtakeExact n xs = | n >= 0 && n <= length xs = take n xs | otherwise = error "some message" mdropExact n xs = | n >= 0 && n <= length xs = drop n xs | otherwise = error "some message" ssplitAtExact n xs = | n >= 0 && n <= length xs = splitAt n xs | otherwise = error "some message" izipExact xs ys = | length xs == length ys = zip xs ys | otherwise = error "some message" uzipWithExact f xs ys = | length xs == length ys = zipWith f xs ys | otherwise = error "some message"vwx    vwx  Safe-Inferred&  findJust op = fromJust . find opyz !"#$%&'()*+ !"#$%&'()*+&'( "$!#%)*+yz !"#$%&'()*+ Safe-Inferred , Synonym for {. Used for instances where the program has decided to exit because of invalid user input, or the user pressed quit etc. This function allows {& to be reserved for programmer errors.- 1tailMay [] = Nothing tailMay [1,3,4] = Just [3,4]. 3tailDef [12] [] = [12] tailDef [12] [1,3,4] = [3,4]/ \tailNote "help me" [] = error "Safe.tailNote [], help me" tailNote "help me" [1,3,4] = [3,4]0 )tailSafe [] = [] tailSafe [1,3,4] = [3,4]VAn alternative name for |?, to fit the naming scheme of this package. Generally using |+ directly would be considered better style.Y Synonym for }5, but includes more information in the error message.` &lookupJust key = fromJust . lookup keyc  findJust op = fromJust . find opf *elemIndexJust op = fromJust . elemIndex opi *findIndexJust op = fromJust . findIndex opH~,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnoD,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnoD,Y`cfi-./0123457968:;=?<>@ACEBDFGJMHKNILOQSUPRTVWXZ[\]^_abdeghjklmnoH~,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmno      !"#$%&'()*+,-./0123456789:;<=>? !"#$%&'()*@ABCDEFGHIJKLMNOPQRSTU+,-VWXYZ[\]^_`abcdefghijklmknokpqirstu safe-0.3.9 Safe.Exact Safe.FoldableSafe Safe.Util takeExact dropExact splitAtExact takeExactNote takeExactMay takeExactDef dropExactNote dropExactMay dropExactDefsplitAtExactNotesplitAtExactMaysplitAtExactDefzipExact zipWithExact zipExactNote zipExactMay zipExactDefzipWithExactNotezipWithExactMayzipWithExactDef foldl1May foldr1May foldl1Note foldr1Note foldl1Def foldr1Def minimumMay maximumMay minimumDef maximumDef minimumNote maximumNote minimumByMay maximumByMay minimumByDef maximumByDef minimumByNote maximumByNotefindJust findJustDef findJustNote foldl1Safe foldr1Safe findJustSafeaborttailMaytailDeftailNotetailSafeinitMayinitDefinitNoteinitSafeheadMaylastMayheadDeflastDefheadNotelastNote foldl1May' foldl1Def' foldl1Note' scanr1May scanl1May scanr1Def scanl1Def scanr1Note scanl1Note fromJustDef fromJustNote assertNoteatatMayatDefatNotereadMayreadDefreadNote lookupJust lookupJustDeflookupJustNote elemIndexJustelemIndexJustDefelemIndexJustNote findIndexJustfindIndexJustDeffindIndexJustNote toEnumMay toEnumDef toEnumNote toEnumSafe.^.^^liftMayfromNoteModulefromNoteEitherModule eitherToMaybeaddNote splitAtExact_ zipWithExact_fromNoteisNullbaseGHC.Errerror Data.Maybe fromMaybeGHC.List!!fromNoteEitherat_read_