6._      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~SafeSafe 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.  findJust op = fromJust . find op !"#$%&'()*+,-./0123 !"#$%&'()*+,-./0123. !/0"$&#%'(*,)+-123 !"#$%&'()*+,-./0123Safe 4 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.5 1tailMay [] = Nothing tailMay [1,3,4] = Just [3,4]6 3tailDef [12] [] = [12] tailDef [12] [1,3,4] = [3,4]7 \tailNote "help me" [] = error "Safe.tailNote [], help me" tailNote "help me" [1,3,4] = [3,4]8 )tailSafe [] = [] tailSafe [1,3,4] = [3,4]aAn alternative name for ?, to fit the naming scheme of this package. Generally using + directly would be considered better style.d Synonym for 5, but includes more information in the error message.h9This function provides a more precise error message than  readEither from base.kk uses h for the error message.l &lookupJust key = fromJust . lookup keyo  findJust op = fromJust . find opr *elemIndexJust op = fromJust . elemIndex opu *findIndexJust op = fromJust . findIndex opS456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~P456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~P4dloru56789:;<=?A>@BCEGDFHIKMJLNORUPSVQTWY[]XZ\^_`abcefgijkhmnpqstvwxyz{|}~S456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFG'()*+,-./012"!H&%I$#JKLMNOPQRSTUVWXYZ[\]^_`a345bcdefghijklmnopqrstuvwxyz{|}~E3m91TNRmrGCwD6DRrkDwi Safe.Exact Safe.FoldableSafe Safe.Util 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_