diff options
Diffstat (limited to 'src/Miscellaneous.hs')
-rw-r--r-- | src/Miscellaneous.hs | 87 |
1 files changed, 0 insertions, 87 deletions
diff --git a/src/Miscellaneous.hs b/src/Miscellaneous.hs deleted file mode 100644 index 8081c93..0000000 --- a/src/Miscellaneous.hs +++ /dev/null @@ -1,87 +0,0 @@ -module Miscellaneous( - if', - (?), - (.:), - selectFrom, - readMaybe, - partBeforeAfter - ) where - - - - --- This source is licensed under Creative Commons CC0 v1.0. - --- To read the full text, see license.txt in the main directory of this repository --- or go to https://creativecommons.org/publicdomain/zero/1.0/legalcode.txt - --- For a human readable summary, go to https://creativecommons.org/publicdomain/zero/1.0/ - - - - -import qualified Control.Monad as Con -import qualified Data.List as List -import qualified Data.Maybe as Maybe - - - - -if' :: Bool -> t -> t -> t -if' a b c = if a then b else c - - - - -infixr 1 ? -(?) :: Bool -> t -> t -> t -(?) = if' - - - - --- with this, I have truly gone dotty -infixr 9 .: -(.:) :: (a -> b) -> (c -> d -> a) -> c -> d -> b -(.:) = (.).(.) - - - - --- kinda functions like poor man's sql --- first argument is the indices of the items you want in the results --- second argument is index-item pairs to dictate what records are acceptable to select from --- third argument is the list of items that makes up the record under consideration --- then if the record was deemed acceptable you get the bits you wanted --- (note that all indices start from 1) -selectFrom :: (Num t, Eq t, Eq a, Enum t) => [t] -> [(t,a)] -> [a] -> Maybe [a] -selectFrom pick has from = - let foldFunc r i = - let check = List.lookup (fst i) has - in if (Maybe.isNothing check || Maybe.fromJust check == snd i) - then if (List.elem (fst i) pick) - then Just (r ++ [snd i]) - else Just r - else Nothing - in Con.foldM foldFunc [] (zip [1,2..] from) - - - - -readMaybe :: Read a => String -> Maybe a -readMaybe s = - case reads s of - [(val, "")] -> Just val - _ -> Nothing - - - - -partBeforeAfter :: (Eq a) => a -> [a] -> ([a],[a]) -partBeforeAfter item list = - let (x,y) = List.break (== item) list - in if (length y <= 1) - then (x,[]) - else (x,tail y) - - |