module Hedgehog.Checkers.Ugly.Function.Hack where import Data.Map (Map) import qualified Data.Map as Map import Hedgehog import qualified Hedgehog.Gen as Gen import qualified Hedgehog.Range as Range ---------- vvvvv CANCER PLEASE IGNORE vvvvv ----------------------------- fromMap :: Ord k => v -> Map k v -> k -> v fromMap defaultValue kvs k = case Map.lookup k kvs of Nothing -> defaultValue Just value -> value ordFuncWtf'' :: Ord a => Range Int -> Gen a -> Gen b -> Gen (a -> b) ordFuncWtf'' range gen gen' = do defaultV <- gen' let tupGen = (,) <$> gen <*> gen' map <- Gen.map range tupGen return $ fromMap defaultV map ordFuncWtf' :: Ord a => Gen a -> Gen b -> Gen (a -> b) ordFuncWtf' = ordFuncWtf'' (Range.linear 0 1000) funcForAllWtf :: Monad m => Gen a -> PropertyT m a funcForAllWtf g = do let funcShow _ = "" forAllWith funcShow $ g ordFuncWtf :: (Ord a, Monad m) => Gen a -> Gen b -> PropertyT m (a -> b) ordFuncWtf gena genb = do -- let funcShow _ = "" -- forAllWith funcShow $ ordFuncWtf' gena genb funcForAllWtf $ ordFuncWtf' gena genb liftedFunctionWtf :: (Functor f, Show (f z), Ord a, Monad m) => Gen (f z) -> Gen a -> Gen b -> PropertyT m (f (a -> b)) liftedFunctionWtf gen gena genb = do fab' <- ordFuncWtf gena genb fmap (const fab') <$> forAll gen ---------- ^^^^^ CANCER PLEASE IGNORE ^^^^^ -----------------------------