-- |
-- Module      :  TLynx.TLynx
-- Description :  TLynx module
-- Copyright   :  2021 Dominik Schrempf
-- License     :  GPL-3.0-or-later
--
-- Maintainer  :  dominik.schrempf@gmail.com
-- Stability   :  unstable
-- Portability :  portable
--
-- Creation date: Thu Apr 23 16:36:43 2020.
module TLynx.TLynx
  ( tlynx,
    rTLynx,
  )
where

import ELynx.Tools.ELynx
import ELynx.Tools.Options
import TLynx.Compare.Compare
import TLynx.Connect.Connect
import TLynx.Distance.Distance
import TLynx.Examine.Examine
import TLynx.Options
import TLynx.Shuffle.Shuffle
import TLynx.Simulate.Simulate

-- | Run TLynx with given arguments.
tlynx :: Arguments CommandArguments -> IO ()
tlynx :: Arguments CommandArguments -> IO ()
tlynx Arguments CommandArguments
c = case forall a. Arguments a -> a
local Arguments CommandArguments
c of
  Compare CompareArguments
l -> forall a b.
(Eq a, Show a, Reproducible a, Reproducible b, ToJSON a) =>
GlobalArguments -> b -> (b -> a) -> ELynx b () -> IO ()
eLynxWrapper GlobalArguments
g CompareArguments
l CompareArguments -> CommandArguments
Compare ELynx CompareArguments ()
compareCmd
  Connect ConnectArguments
l -> forall a b.
(Eq a, Show a, Reproducible a, Reproducible b, ToJSON a) =>
GlobalArguments -> b -> (b -> a) -> ELynx b () -> IO ()
eLynxWrapper GlobalArguments
g ConnectArguments
l ConnectArguments -> CommandArguments
Connect ELynx ConnectArguments ()
connectCmd
  Distance DistanceArguments
l -> forall a b.
(Eq a, Show a, Reproducible a, Reproducible b, ToJSON a) =>
GlobalArguments -> b -> (b -> a) -> ELynx b () -> IO ()
eLynxWrapper GlobalArguments
g DistanceArguments
l DistanceArguments -> CommandArguments
Distance ELynx DistanceArguments ()
distance
  Examine ExamineArguments
l -> forall a b.
(Eq a, Show a, Reproducible a, Reproducible b, ToJSON a) =>
GlobalArguments -> b -> (b -> a) -> ELynx b () -> IO ()
eLynxWrapper GlobalArguments
g ExamineArguments
l ExamineArguments -> CommandArguments
Examine ELynx ExamineArguments ()
examine
  Shuffle ShuffleArguments
l -> forall a b.
(Eq a, Show a, Reproducible a, Reproducible b, ToJSON a) =>
GlobalArguments -> b -> (b -> a) -> ELynx b () -> IO ()
eLynxWrapper GlobalArguments
g ShuffleArguments
l ShuffleArguments -> CommandArguments
Shuffle ELynx ShuffleArguments ()
shuffleCmd
  Simulate SimulateArguments
l -> forall a b.
(Eq a, Show a, Reproducible a, Reproducible b, ToJSON a) =>
GlobalArguments -> b -> (b -> a) -> ELynx b () -> IO ()
eLynxWrapper GlobalArguments
g SimulateArguments
l SimulateArguments -> CommandArguments
Simulate ELynx SimulateArguments ()
simulate
  where
    g :: GlobalArguments
g = forall a. Arguments a -> GlobalArguments
global Arguments CommandArguments
c

-- | Run TLynx, parse arguments from command line.
rTLynx :: IO ()
rTLynx :: IO ()
rTLynx = forall a. Reproducible a => IO (Arguments a)
parseArguments forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Arguments CommandArguments -> IO ()
tlynx