module Utils.Utils(
universeToList,
crop,
listToUniverse
) where
import Data.List(nub)
flattenPairs :: [(a, a)] -> [a]
flattenPairs :: forall a. [(a, a)] -> [a]
flattenPairs = forall (t :: * -> *) a b.
Foldable t =>
(a -> b -> b) -> b -> t a -> b
foldr (\(a
x ,a
y) -> forall a. [a] -> [a] -> [a]
(++) [a
x, a
y]) []
universeToList :: (Eq a) => [(a, a)] -> [a]
universeToList :: forall a. Eq a => [(a, a)] -> [a]
universeToList = forall a. Eq a => [a] -> [a]
nub forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. [(a, a)] -> [a]
flattenPairs
listToUniverse :: (Eq a) => [a] -> [(a, a)]
listToUniverse :: forall a. Eq a => [a] -> [(a, a)]
listToUniverse [a]
u = [(a
x, a
y) | a
x <- [a]
u, a
y <- [a]
u]
crop :: RealFloat a => a -> a
crop :: forall a. RealFloat a => a -> a
crop a
x = forall a. Num a => Integer -> a
fromInteger (forall a b. (RealFrac a, Integral b) => a -> b
round (a
x forall a. Num a => a -> a -> a
* (a
10forall a b. (Num a, Integral b) => a -> b -> a
^Integer
6))) forall a. Fractional a => a -> a -> a
/ (a
10.0forall a b. (Fractional a, Integral b) => a -> b -> a
^^Integer
6)