{-# LANGUAGE CPP #-}
module MagicHaskeller.Minimal(e, f1E, f1EF, f1EIO, f1EFIO, simpleEF, ProgGenSF, NearEq((~=)), postprocess, ppExcel) where
import MagicHaskeller.LibTH
import MagicHaskeller.LibExcel
import MagicHaskeller.ProgGenSF
import MagicHaskeller.ProgramGenerator
import Data.Typeable
import MagicHaskeller.NearEq(NearEq((~=)))
import Language.Haskell.TH(Exp)
import MagicHaskeller.CoreLang(CoreExpr)
import MagicHaskeller.DebMT(interleaveActions)
#ifdef PAR
import Control.Monad.Par.IO
import Control.Monad.IO.Class(liftIO)
#endif
f1E :: Typeable a => (Exp->Exp) -> (a -> Bool) -> ProgGenSF -> Bool -> [[Exp]]
f1E :: (Exp -> Exp) -> (a -> Bool) -> ProgGenSF -> Bool -> [[Exp]]
f1E Exp -> Exp
postproc a -> Bool
pred ProgGenSF
pgsf Bool
withAbsents = let o :: Opt ()
o = Common -> Opt ()
opt (Common -> Opt ()) -> Common -> Opt ()
forall a b. (a -> b) -> a -> b
$ ProgGenSF -> Common
forall a. WithCommon a => a -> Common
extractCommon ProgGenSF
pgsf in ([(Exp, a)] -> [Exp]) -> [[(Exp, a)]] -> [[Exp]]
forall a b. (a -> b) -> [a] -> [b]
map (((Exp, a) -> Exp) -> [(Exp, a)] -> [Exp]
forall a b. (a -> b) -> [a] -> [b]
map (Exp -> Exp
postproc (Exp -> Exp) -> ((Exp, a) -> Exp) -> (Exp, a) -> Exp
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Exp, a) -> Exp
forall a b. (a, b) -> a
fst)) ([[(Exp, a)]] -> [[Exp]]) -> [[(Exp, a)]] -> [[Exp]]
forall a b. (a -> b) -> a -> b
$ ([((Exp, a), (Exp, a))] -> [(Exp, a)])
-> [[((Exp, a), (Exp, a))]] -> [[(Exp, a)]]
forall a b. (a -> b) -> [a] -> [b]
map (Maybe Int -> (a -> Bool) -> [((Exp, a), (Exp, a))] -> [(Exp, a)]
forall a.
Typeable a =>
Maybe Int -> (a -> Bool) -> [((Exp, a), (Exp, a))] -> [(Exp, a)]
fpartial (Opt () -> Maybe Int
forall a. Opt a -> Maybe Int
timeout Opt ()
o) a -> Bool
pred) ([[((Exp, a), (Exp, a))]] -> [[(Exp, a)]])
-> [[((Exp, a), (Exp, a))]] -> [[(Exp, a)]]
forall a b. (a -> b) -> a -> b
$ a -> ProgGenSF -> Bool -> [[((Exp, a), (Exp, a))]]
forall pg a.
(ProgramGenerator pg, Typeable a) =>
a -> pg -> Bool -> [[((Exp, a), (Exp, a))]]
etup a
forall a. HasCallStack => a
undefined ProgGenSF
pgsf Bool
withAbsents
f1EF :: (Filtrable a, Typeable a) => (Exp->Exp) -> (a -> Bool) -> ProgGenSF -> Bool -> [[Exp]]
f1EF :: (Exp -> Exp) -> (a -> Bool) -> ProgGenSF -> Bool -> [[Exp]]
f1EF Exp -> Exp
postproc a -> Bool
pred ProgGenSF
pgsf Bool
withAbsents = let o :: Opt ()
o = Common -> Opt ()
opt (Common -> Opt ()) -> Common -> Opt ()
forall a b. (a -> b) -> a -> b
$ ProgGenSF -> Common
forall a. WithCommon a => a -> Common
extractCommon ProgGenSF
pgsf in ([(Exp, a)] -> [Exp]) -> [[(Exp, a)]] -> [[Exp]]
forall a b. (a -> b) -> [a] -> [b]
map (((Exp, a) -> Exp) -> [(Exp, a)] -> [Exp]
forall a b. (a -> b) -> [a] -> [b]
map (Exp -> Exp
postproc (Exp -> Exp) -> ((Exp, a) -> Exp) -> (Exp, a) -> Exp
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Exp, a) -> Exp
forall a b. (a, b) -> a
fst)) ([[(Exp, a)]] -> [[Exp]]) -> [[(Exp, a)]] -> [[Exp]]
forall a b. (a -> b) -> a -> b
$ Opt () -> [[(Exp, a)]] -> [[(Exp, a)]]
forall a b e.
(Typeable a, Filtrable a) =>
Opt b -> [[(e, a)]] -> [[(e, a)]]
everyF Opt ()
o ([[(Exp, a)]] -> [[(Exp, a)]]) -> [[(Exp, a)]] -> [[(Exp, a)]]
forall a b. (a -> b) -> a -> b
$ ([((Exp, a), (Exp, a))] -> [(Exp, a)])
-> [[((Exp, a), (Exp, a))]] -> [[(Exp, a)]]
forall a b. (a -> b) -> [a] -> [b]
map (Maybe Int -> (a -> Bool) -> [((Exp, a), (Exp, a))] -> [(Exp, a)]
forall a.
Typeable a =>
Maybe Int -> (a -> Bool) -> [((Exp, a), (Exp, a))] -> [(Exp, a)]
fpartial (Opt () -> Maybe Int
forall a. Opt a -> Maybe Int
timeout Opt ()
o) a -> Bool
pred) ([[((Exp, a), (Exp, a))]] -> [[(Exp, a)]])
-> [[((Exp, a), (Exp, a))]] -> [[(Exp, a)]]
forall a b. (a -> b) -> a -> b
$ a -> ProgGenSF -> Bool -> [[((Exp, a), (Exp, a))]]
forall pg a.
(ProgramGenerator pg, Typeable a) =>
a -> pg -> Bool -> [[((Exp, a), (Exp, a))]]
etup a
forall a. HasCallStack => a
undefined ProgGenSF
pgsf Bool
withAbsents
e :: Typeable a => (Exp->Exp) -> a -> ProgGenSF -> Bool -> [[Exp]]
e :: (Exp -> Exp) -> a -> ProgGenSF -> Bool -> [[Exp]]
e Exp -> Exp
postproc a
dmy ProgGenSF
pgsf Bool
withAbsents = let o :: Opt ()
o = Common -> Opt ()
opt (Common -> Opt ()) -> Common -> Opt ()
forall a b. (a -> b) -> a -> b
$ ProgGenSF -> Common
forall a. WithCommon a => a -> Common
extractCommon ProgGenSF
pgsf in ([((Exp, a), (Exp, a))] -> [Exp])
-> [[((Exp, a), (Exp, a))]] -> [[Exp]]
forall a b. (a -> b) -> [a] -> [b]
map ((((Exp, a), (Exp, a)) -> Exp) -> [((Exp, a), (Exp, a))] -> [Exp]
forall a b. (a -> b) -> [a] -> [b]
map (Exp -> Exp
postproc (Exp -> Exp)
-> (((Exp, a), (Exp, a)) -> Exp) -> ((Exp, a), (Exp, a)) -> Exp
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Exp, a) -> Exp
forall a b. (a, b) -> a
fst ((Exp, a) -> Exp)
-> (((Exp, a), (Exp, a)) -> (Exp, a))
-> ((Exp, a), (Exp, a))
-> Exp
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ((Exp, a), (Exp, a)) -> (Exp, a)
forall a b. (a, b) -> a
fst))([[((Exp, a), (Exp, a))]] -> [[Exp]])
-> [[((Exp, a), (Exp, a))]] -> [[Exp]]
forall a b. (a -> b) -> a -> b
$ a -> ProgGenSF -> Bool -> [[((Exp, a), (Exp, a))]]
forall pg a.
(ProgramGenerator pg, Typeable a) =>
a -> pg -> Bool -> [[((Exp, a), (Exp, a))]]
etup a
dmy ProgGenSF
pgsf Bool
withAbsents
f1EIO :: Typeable a => (Exp->Exp) -> (a -> Bool) -> ProgGenSF -> Bool -> IO [[Exp]]
f1EIO :: (Exp -> Exp) -> (a -> Bool) -> ProgGenSF -> Bool -> IO [[Exp]]
f1EIO Exp -> Exp
postproc a -> Bool
pred ProgGenSF
pgsf Bool
withAbsents
= let o :: Opt ()
o = Common -> Opt ()
opt (Common -> Opt ()) -> Common -> Opt ()
forall a b. (a -> b) -> a -> b
$ ProgGenSF -> Common
forall a. WithCommon a => a -> Common
extractCommon ProgGenSF
pgsf
in ([[(Exp, a)]] -> [[Exp]]) -> IO [[(Exp, a)]] -> IO [[Exp]]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (([(Exp, a)] -> [Exp]) -> [[(Exp, a)]] -> [[Exp]]
forall a b. (a -> b) -> [a] -> [b]
map (((Exp, a) -> Exp) -> [(Exp, a)] -> [Exp]
forall a b. (a -> b) -> [a] -> [b]
map (Exp -> Exp
postproc (Exp -> Exp) -> ((Exp, a) -> Exp) -> (Exp, a) -> Exp
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Exp, a) -> Exp
forall a b. (a, b) -> a
fst))) (IO [[(Exp, a)]] -> IO [[Exp]]) -> IO [[(Exp, a)]] -> IO [[Exp]]
forall a b. (a -> b) -> a -> b
$ [IO [(Exp, a)]] -> IO [[(Exp, a)]]
forall a. [IO a] -> IO [a]
interleaveActions ([IO [(Exp, a)]] -> IO [[(Exp, a)]])
-> [IO [(Exp, a)]] -> IO [[(Exp, a)]]
forall a b. (a -> b) -> a -> b
$ ([((Exp, a), (Exp, a))] -> IO [(Exp, a)])
-> [[((Exp, a), (Exp, a))]] -> [IO [(Exp, a)]]
forall a b. (a -> b) -> [a] -> [b]
map (Maybe Int -> (a -> Bool) -> [((Exp, a), (Exp, a))] -> IO [(Exp, a)]
forall a e.
Typeable a =>
Maybe Int -> (a -> Bool) -> [((e, a), (e, a))] -> IO [(e, a)]
fpartialIO (Opt () -> Maybe Int
forall a. Opt a -> Maybe Int
timeout Opt ()
o) a -> Bool
pred) ([[((Exp, a), (Exp, a))]] -> [IO [(Exp, a)]])
-> [[((Exp, a), (Exp, a))]] -> [IO [(Exp, a)]]
forall a b. (a -> b) -> a -> b
$ a -> ProgGenSF -> Bool -> [[((Exp, a), (Exp, a))]]
forall pg a.
(ProgramGenerator pg, Typeable a) =>
a -> pg -> Bool -> [[((Exp, a), (Exp, a))]]
etup a
forall a. HasCallStack => a
undefined ProgGenSF
pgsf Bool
withAbsents
chopN :: Int -> [a] -> [[a]]
chopN Int
n [a]
xs = ([a] -> [a]) -> [[a]] -> [[a]]
forall a b. (a -> b) -> [a] -> [b]
map (Int -> [a] -> [a]
forall a. Int -> [a] -> [a]
take Int
n) ([[a]] -> [[a]]) -> [[a]] -> [[a]]
forall a b. (a -> b) -> a -> b
$ ([a] -> [a]) -> [a] -> [[a]]
forall a. (a -> a) -> a -> [a]
iterate (Int -> [a] -> [a]
forall a. Int -> [a] -> [a]
drop Int
n) [a]
xs
f1EFIO :: (Filtrable a, Typeable a) => (Exp->Exp) -> (a -> Bool) -> ProgGenSF -> Bool -> IO [[Exp]]
f1EFIO :: (Exp -> Exp) -> (a -> Bool) -> ProgGenSF -> Bool -> IO [[Exp]]
f1EFIO Exp -> Exp
postproc a -> Bool
pred ProgGenSF
pgsf Bool
withAbsents
= let o :: Opt ()
o = Common -> Opt ()
opt (Common -> Opt ()) -> Common -> Opt ()
forall a b. (a -> b) -> a -> b
$ ProgGenSF -> Common
forall a. WithCommon a => a -> Common
extractCommon ProgGenSF
pgsf
in ([[(Exp, a)]] -> [[Exp]]) -> IO [[(Exp, a)]] -> IO [[Exp]]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (([(Exp, a)] -> [Exp]) -> [[(Exp, a)]] -> [[Exp]]
forall a b. (a -> b) -> [a] -> [b]
map (((Exp, a) -> Exp) -> [(Exp, a)] -> [Exp]
forall a b. (a -> b) -> [a] -> [b]
map (Exp -> Exp
postproc (Exp -> Exp) -> ((Exp, a) -> Exp) -> (Exp, a) -> Exp
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Exp, a) -> Exp
forall a b. (a, b) -> a
fst)) ([[(Exp, a)]] -> [[Exp]])
-> ([[(Exp, a)]] -> [[(Exp, a)]]) -> [[(Exp, a)]] -> [[Exp]]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Opt () -> [[(Exp, a)]] -> [[(Exp, a)]]
forall a b e.
(Typeable a, Filtrable a) =>
Opt b -> [[(e, a)]] -> [[(e, a)]]
everyF Opt ()
o) (IO [[(Exp, a)]] -> IO [[Exp]]) -> IO [[(Exp, a)]] -> IO [[Exp]]
forall a b. (a -> b) -> a -> b
$ [IO [(Exp, a)]] -> IO [[(Exp, a)]]
forall a. [IO a] -> IO [a]
interleaveActions ([IO [(Exp, a)]] -> IO [[(Exp, a)]])
-> [IO [(Exp, a)]] -> IO [[(Exp, a)]]
forall a b. (a -> b) -> a -> b
$ ([((Exp, a), (Exp, a))] -> IO [(Exp, a)])
-> [[((Exp, a), (Exp, a))]] -> [IO [(Exp, a)]]
forall a b. (a -> b) -> [a] -> [b]
map (Maybe Int -> (a -> Bool) -> [((Exp, a), (Exp, a))] -> IO [(Exp, a)]
forall a e.
Typeable a =>
Maybe Int -> (a -> Bool) -> [((e, a), (e, a))] -> IO [(e, a)]
fpartialIO (Opt () -> Maybe Int
forall a. Opt a -> Maybe Int
timeout Opt ()
o) a -> Bool
pred) ([[((Exp, a), (Exp, a))]] -> [IO [(Exp, a)]])
-> [[((Exp, a), (Exp, a))]] -> [IO [(Exp, a)]]
forall a b. (a -> b) -> a -> b
$ a -> ProgGenSF -> Bool -> [[((Exp, a), (Exp, a))]]
forall pg a.
(ProgramGenerator pg, Typeable a) =>
a -> pg -> Bool -> [[((Exp, a), (Exp, a))]]
etup a
forall a. HasCallStack => a
undefined ProgGenSF
pgsf Bool
withAbsents
simpleF1EFIO :: (Filtrable a, Typeable a) => (a -> Bool) -> ProgGenSF -> Bool -> IO [[(CoreExpr, a)]]
simpleF1EFIO :: (a -> Bool) -> ProgGenSF -> Bool -> IO [[(CoreExpr, a)]]
simpleF1EFIO a -> Bool
pred ProgGenSF
pgsf Bool
withAbsents
= let o :: Opt ()
o = Common -> Opt ()
opt (Common -> Opt ()) -> Common -> Opt ()
forall a b. (a -> b) -> a -> b
$ ProgGenSF -> Common
forall a. WithCommon a => a -> Common
extractCommon ProgGenSF
pgsf
in ([[(CoreExpr, a)]] -> [[(CoreExpr, a)]])
-> IO [[(CoreExpr, a)]] -> IO [[(CoreExpr, a)]]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (Opt () -> [[(CoreExpr, a)]] -> [[(CoreExpr, a)]]
forall a b e.
(Typeable a, Filtrable a) =>
Opt b -> [[(e, a)]] -> [[(e, a)]]
everyF Opt ()
o) (IO [[(CoreExpr, a)]] -> IO [[(CoreExpr, a)]])
-> IO [[(CoreExpr, a)]] -> IO [[(CoreExpr, a)]]
forall a b. (a -> b) -> a -> b
$ [IO [(CoreExpr, a)]] -> IO [[(CoreExpr, a)]]
forall a. [IO a] -> IO [a]
interleaveActions ([IO [(CoreExpr, a)]] -> IO [[(CoreExpr, a)]])
-> [IO [(CoreExpr, a)]] -> IO [[(CoreExpr, a)]]
forall a b. (a -> b) -> a -> b
$ ([(CoreExpr, a)] -> IO [(CoreExpr, a)])
-> [[(CoreExpr, a)]] -> [IO [(CoreExpr, a)]]
forall a b. (a -> b) -> [a] -> [b]
map (Maybe Int -> (a -> Bool) -> [(CoreExpr, a)] -> IO [(CoreExpr, a)]
forall a e.
Typeable a =>
Maybe Int -> (a -> Bool) -> [(e, a)] -> IO [(e, a)]
ftotalIO (Opt () -> Maybe Int
forall a. Opt a -> Maybe Int
timeout Opt ()
o) a -> Bool
pred) ([[(CoreExpr, a)]] -> [IO [(CoreExpr, a)]])
-> [[(CoreExpr, a)]] -> [IO [(CoreExpr, a)]]
forall a b. (a -> b) -> a -> b
$ ProgGenSF -> Bool -> [[(CoreExpr, a)]]
forall pg a.
(ProgramGenerator pg, Typeable a) =>
pg -> Bool -> [[(CoreExpr, a)]]
everyACE ProgGenSF
pgsf Bool
withAbsents
simpleEF :: (Filtrable a, Typeable a) => ProgGenSF -> Bool -> [[(CoreExpr,a)]]
simpleEF :: ProgGenSF -> Bool -> [[(CoreExpr, a)]]
simpleEF ProgGenSF
pgsf Bool
withAbsents
= let o :: Opt ()
o = Common -> Opt ()
opt (Common -> Opt ()) -> Common -> Opt ()
forall a b. (a -> b) -> a -> b
$ ProgGenSF -> Common
forall a. WithCommon a => a -> Common
extractCommon ProgGenSF
pgsf
in Opt () -> [[(CoreExpr, a)]] -> [[(CoreExpr, a)]]
forall a b e.
(Typeable a, Filtrable a) =>
Opt b -> [[(e, a)]] -> [[(e, a)]]
everyF Opt ()
o ([[(CoreExpr, a)]] -> [[(CoreExpr, a)]])
-> [[(CoreExpr, a)]] -> [[(CoreExpr, a)]]
forall a b. (a -> b) -> a -> b
$ ProgGenSF -> Bool -> [[(CoreExpr, a)]]
forall pg a.
(ProgramGenerator pg, Typeable a) =>
pg -> Bool -> [[(CoreExpr, a)]]
everyACE ProgGenSF
pgsf Bool
withAbsents