module General (foldlPair , openpair , openpair21 , openpair22 , wrppair , wrppair21 , wrppair22 , listRandomSelect , listConnectedComponent) where import System.Random foldlPair :: (a -> b -> c -> a) -> a -> [(b , c)] -> a foldlPair f y xs = foldl (wrppair22 f ) y xs openpair :: ((a , b) -> c) -> a -> b -> c openpair f x y = f (x , y) openpair22 :: (a -> (b , c) -> d) -> a -> b -> c -> d openpair22 f x y z = f x (y , z) openpair21 :: ((b , c) -> a -> d) -> b -> c -> a -> d openpair21 f x y z = f (x , y) z wrppair :: (a -> b -> c) -> (a , b) -> c wrppair f (x , y) = f x y wrppair21 :: (a -> b -> c -> d) -> (a , b) -> c -> d wrppair21 f (x , y) z= f x y z wrppair22 :: (a -> b -> c -> d) -> a -> (b , c) -> d wrppair22 f z (x , y) = f z x y listRandomSelect :: StdGen -> [a] -> (a , StdGen) listRandomSelect rgen xs = let rand = randomR (0 , ((length xs) - 1)) rgen in ((xs !! (fst rand) ) , (snd rand)) listConnectedComponent :: (Eq a) => [a] -> [a] listConnectedComponent lst@(x : xs) = if (length lst) <= 1 then lst else if x == (head xs) then listConnectedComponent xs else x : (listConnectedComponent xs)