;3R      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~Safe&345>A constraint synonym which denotes that the function is partial, and will (on GHC 8.* and up) produce a stack trace on failure. You may mark your own non-total functions as Partial, if necessary, and this will ensure that they produce useful stack traces.Safe&4Safe&4 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" zip3Exact xs ys zs = | length xs == length ys && length xs == length zs = zip3 xs ys zs | otherwise = error "some message" zipWith3Exact f xs ys zs = | length xs == length ys && length xs == length zs = zipWith3 f xs ys zs | otherwise = error "some message"       Safe&4/  findJust op = fromJust . find op !"#$%&'()*+,-./01234 !"#$%&'()*+,-./01234/!" 01#%'$&()+-*,.234 !"#$%&'()*+,-./01234Safe&4 5 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.6 1tailMay [] = Nothing tailMay [1,3,4] = Just [3,4]7 3tailDef [12] [] = [12] tailDef [12] [1,3,4] = [3,4]8 \tailNote "help me" [] = error "Safe.tailNote [], help me" tailNote "help me" [1,3,4] = [3,4]9 )tailSafe [] = [] tailSafe [1,3,4] = [3,4]bAn alternative name for ?, to fit the naming scheme of this package. Generally using + directly would be considered better style.e Synonym for 5, but includes more information in the error message.i9This function provides a more precise error message than  readEither from base.ll uses i for the error message.m &lookupJust key = fromJust . lookup keyp  findJust op = fromJust . find ops *elemIndexJust op = fromJust . elemIndex opv *findIndexJust op = fromJust . findIndex opS56789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~P56789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~P5empsv6789:;<=>@B?ACDFHEGIJLNKMOPSVQTWRUXZ\^Y[]_`abcdfghjklinoqrtuwxyz{|}~S56789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHI)*+,-./01234$#J('K&%LMNOPQRSTUVWXYZ[\]^_`abc567defghijklmnopqrstuvwxyz{|}~9KpkF6m1kPR7X6owoQce6S Safe.Partial Safe.Exact Safe.FoldableSafe Safe.UtilPartial takeExact dropExact splitAtExact takeExactNote takeExactMay takeExactDef dropExactNote dropExactMay dropExactDefsplitAtExactNotesplitAtExactMaysplitAtExactDefzipExact zipWithExact zipExactNote zipExactMay zipExactDefzipWithExactNotezipWithExactMayzipWithExactDef zip3Exact zipWith3Exact zip3ExactNote zip3ExactMay zip3ExactDefzipWith3ExactNotezipWith3ExactMayzipWith3ExactDef 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 scanl1NotecycleMaycycleDef cycleNote fromJustDef fromJustNote assertNoteatatMayatDefatNotereadEitherSafereadMayreadDefreadNote lookupJust lookupJustDeflookupJustNote elemIndexJustelemIndexJustDefelemIndexJustNote findIndexJustfindIndexJustDeffindIndexJustNote toEnumMay toEnumDef toEnumNote toEnumSafesuccMaysuccDefsuccNotesuccSafepredMaypredDefpredNotepredSafe.^.^^.^^^liftMayfromNoteModulefromNoteEitherModule eitherToMaybeaddNote splitAtExact_ zipWithExact_zipWith3Exact_fromNoteisNullbaseGHC.Errerror Data.Maybe fromMaybeGHC.List!!fromNoteEitherat_