content: module MainConfig
    ( testDictRatings 
    , testHeuristicsConfig
    , testBaseInput
    , testBaseInput'
    )
  where
  
  
  
  import Language.Haskell.Exference.Core ( ExferenceHeuristicsConfig(..)
                                         )
  
  import Language.Haskell.Exts.Extension ( Language (..)
                                         , Extension (..)
                                         , KnownExtension (..) )
  
  import Language.Haskell.Exts.Parser ( ParseMode (..) )
  
  
  testDictRatings :: [(String, Float)]
  testDictRatings =
    [ (,) "maybe"    0.0
    , (,) "either"   0.0
    , (,) "curry"    0.0
    , (,) "uncurry"  0.0
    --, (,) "compare"  0.0
    --, (,) "minBound" 0.0
    --, (,) "maxBound" 0.0
    , (,) "fmap"     0.0
    -- , (,) "pure"     0.0
    -- , (,) "(<*>)"    0.0
    , (,) "(>>=)"    0.0
    , (,) "mapM"     0.0
    , (,) "sequence" 0.0
    , (,) "foldl"    0.0
    , (,) "foldr"    0.0
    , (,) "concat"   0.0
    , (,) "zip"      0.0
    , (,) "zip3"     0.0
    , (,) "zipWith"  0.0
    , (,) "unzip"    0.0
    , (,) "unzip3"   0.0
    , (,) "repeat"   0.0
    , (,) "Just"     0.0
    --, (,) "(&&)"       0.0
    --, (,) "(||)"       0.0
    ]
  
  testBaseInput :: [(Bool, String)]
  testBaseInput = [ (,) True  "GHCEnum"
                  , (,) True  "GHCReal"
                  , (,) True  "GHCShow"
                  , (,) False "ControlMonad"
                  , (,) False "DataEither"
                  , (,) False "DataList"
                  , (,) False "DataMaybe"
                  , (,) False "DataTuple"
                  , (,) False "DataOrd"
                  , (,) False "GHCArr"
                  , (,) False "GHCBase"
                  , (,) False "GHCFloat"
                  , (,) False "GHCList"
                  , (,) False "GHCNum"
                  , (,) False "GHCST"
                  , (,) False "SystemIOError"
                  , (,) False "SystemIO"
                  , (,) False "TextRead"
                  ]
  
  testBaseInput' :: [(ParseMode, String)]
  testBaseInput' = map h testBaseInput
    where
      h (shouldBangPattern, s) =
        let exts1 = (if shouldBangPattern then (BangPatterns:) else id)
                    [ UnboxedTuples
                    , TypeOperators
                    , MagicHash
                    , NPlusKPatterns
                    , ExplicitForAll
                    , ExistentialQuantification
                    , TypeFamilies
                    , PolyKinds
                    , DataKinds ]
            exts2 = map EnableExtension exts1
            mode = ParseMode (s++".hs")
                             Haskell2010
                             exts2
                             False
                             False
                             Nothing
                             False
            fname = "./BaseContext/preprocessed/"++s++".hs"
        in (mode, fname)
  
  testHeuristicsConfig :: ExferenceHeuristicsConfig
  testHeuristicsConfig = ExferenceHeuristicsConfig
    { heuristics_goalVar               =  0.8 -- tested to .1
    , heuristics_goalCons              =  0.7 -- tested to .1
    , heuristics_goalArrow             =  4.3 -- tested to .1
    , heuristics_goalApp               =  1.9 -- tested to .1
    , heuristics_stepProvidedGood      =  0.22 -- tested to .1
    , heuristics_stepProvidedBad       =  5.0 -- tested to .1
    , heuristics_stepEnvGood           =  6.0 -- tested to .1
    , heuristics_stepEnvBad            = 22.0 -- can improve, but needs testcases
    , heuristics_tempUnusedVarPenalty  =  1.1 -- tested to .1
    , heuristics_tempMultiVarUsePenalty=  6.7 -- tested to .1
    , heuristics_functionGoalTransform =  0.1 -- tested to .1
    , heuristics_unusedVar             = 20.0
    , heuristics_solutionLength        =  0.0153
    }
  