+% s      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrSafestuvwxstuvwxstuvwxSafe 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"yz{    yz{ Safe&  findJust op = fromJust . find op|} !"#$%&'()*+ !"#$%&'()*+&'( "$!#%)*+|} !"#$%&'()*+Safe , 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]YAn alternative name for ?, to fit the naming scheme of this package. Generally using + directly would be considered better style.\ Synonym for 5, but includes more information in the error message.c &lookupJust key = fromJust . lookup keyf  findJust op = fromJust . find opi *elemIndexJust op = fromJust . elemIndex opl *findIndexJust op = fromJust . findIndex opK,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrG,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrG,\cfil-./0123457968:;=?<>@ACEBDFGJMHKNILOQSUPRTVWXYZ[]^_`abdeghjkmnopqrK,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqr      !"#$%&'()*+,-./0123456789:;<=>? !"#$%&'()*@ABCDEFGHIJKLMNOPQRSTUVWX+,-YZ[\]^_`abcdefghijklmnopnqrnstluvwxISjHnn9sZAO5VK3WsxcunT 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 scanl1NotecycleMaycycleDef cycleNote fromJustDef fromJustNote assertNoteatatMayatDefatNotereadMayreadDefreadNote lookupJust lookupJustDeflookupJustNote elemIndexJustelemIndexJustDefelemIndexJustNote findIndexJustfindIndexJustDeffindIndexJustNote toEnumMay toEnumDef toEnumNote toEnumSafe.^.^^liftMayfromNoteModulefromNoteEitherModule eitherToMaybeaddNote splitAtExact_ zipWithExact_fromNoteisNullbaseGHC.Errerror Data.Maybe fromMaybeGHC.List!!fromNoteEitherat_read_