blob: 5a559a5497dd4c745aa268de26c285521e173d25 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
module Miscellaneous(
if',
(?),
selectFrom
) where
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'
-- 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)
|