{-# LANGUAGE OverloadedStrings
           , TupleSections
           , StandaloneDeriving #-}

module System.Posix.ARX.CLI.Options where

import Control.Applicative hiding (many)
import Control.Monad
import Data.ByteString (ByteString)
import qualified Data.ByteString as Bytes
import qualified Data.ByteString.Char8 as Char8
import Data.Either
import Data.List
import Data.Maybe
import Data.Ord
import Data.Word
import Text.Parsec hiding (satisfy, (<|>))

import qualified Data.Attoparsec.ByteString as Attoparsec

import System.Posix.ARX.CLI.CLTokens (Class(..))
import qualified System.Posix.ARX.CLI.CLTokens as CLTokens
import qualified System.Posix.ARX.Sh as Sh


shdat                       ::  ArgsParser ([Word], [IOStream], [IOStream])
shdat :: ArgsParser ([Word], [IOStream], [IOStream])
shdat                        =  do
  ByteString -> ArgsParser ByteString
arg ByteString
"shdat"
  [(Maybe Word, Maybe IOStream, Maybe IOStream)]
-> ([Word], [IOStream], [IOStream])
forall {a} {a} {a}.
[(Maybe a, Maybe a, Maybe a)] -> ([a], [a], [a])
coalesce ([(Maybe Word, Maybe IOStream, Maybe IOStream)]
 -> ([Word], [IOStream], [IOStream]))
-> ParsecT
     [ByteString]
     ()
     Identity
     [(Maybe Word, Maybe IOStream, Maybe IOStream)]
-> ArgsParser ([Word], [IOStream], [IOStream])
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ParsecT
  [ByteString]
  ()
  Identity
  (Maybe Word, Maybe IOStream, Maybe IOStream)
-> ParsecT [ByteString] () Identity ()
-> ParsecT
     [ByteString]
     ()
     Identity
     [(Maybe Word, Maybe IOStream, Maybe IOStream)]
forall s (m :: * -> *) t u a end.
Stream s m t =>
ParsecT s u m a -> ParsecT s u m end -> ParsecT s u m [a]
manyTill (ParsecT [ByteString] () Identity Word
-> ParsecT
     [ByteString]
     ()
     Identity
     (Maybe Word, Maybe IOStream, Maybe IOStream)
forall {a} {a} {a}.
ParsecT [ByteString] () Identity a
-> ParsecT [ByteString] () Identity (Maybe a, Maybe a, Maybe a)
_1 ParsecT [ByteString] () Identity Word
blockSize ParsecT
  [ByteString]
  ()
  Identity
  (Maybe Word, Maybe IOStream, Maybe IOStream)
-> ParsecT
     [ByteString]
     ()
     Identity
     (Maybe Word, Maybe IOStream, Maybe IOStream)
-> ParsecT
     [ByteString]
     ()
     Identity
     (Maybe Word, Maybe IOStream, Maybe IOStream)
forall a.
ParsecT [ByteString] () Identity a
-> ParsecT [ByteString] () Identity a
-> ParsecT [ByteString] () Identity a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> ParsecT [ByteString] () Identity IOStream
-> ParsecT
     [ByteString]
     ()
     Identity
     (Maybe Word, Maybe IOStream, Maybe IOStream)
forall {a} {a} {a}.
ParsecT [ByteString] () Identity a
-> ParsecT [ByteString] () Identity (Maybe a, Maybe a, Maybe a)
_2 ParsecT [ByteString] () Identity IOStream
outputFile ParsecT
  [ByteString]
  ()
  Identity
  (Maybe Word, Maybe IOStream, Maybe IOStream)
-> ParsecT
     [ByteString]
     ()
     Identity
     (Maybe Word, Maybe IOStream, Maybe IOStream)
-> ParsecT
     [ByteString]
     ()
     Identity
     (Maybe Word, Maybe IOStream, Maybe IOStream)
forall a.
ParsecT [ByteString] () Identity a
-> ParsecT [ByteString] () Identity a
-> ParsecT [ByteString] () Identity a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> ParsecT [ByteString] () Identity IOStream
-> ParsecT
     [ByteString]
     ()
     Identity
     (Maybe Word, Maybe IOStream, Maybe IOStream)
forall {a} {a} {a}.
ParsecT [ByteString] () Identity a
-> ParsecT [ByteString] () Identity (Maybe a, Maybe a, Maybe a)
_3 ParsecT [ByteString] () Identity IOStream
ioStream) ParsecT [ByteString] () Identity ()
forall s (m :: * -> *) t u.
(Stream s m t, Show t) =>
ParsecT s u m ()
eof
 where
  _1 :: ParsecT [ByteString] () Identity a
-> ParsecT [ByteString] () Identity (Maybe a, Maybe a, Maybe a)
_1                         =  ((,Maybe a
forall a. Maybe a
Nothing,Maybe a
forall a. Maybe a
Nothing) (Maybe a -> (Maybe a, Maybe a, Maybe a))
-> (a -> Maybe a) -> a -> (Maybe a, Maybe a, Maybe a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. a -> Maybe a
forall a. a -> Maybe a
Just (a -> (Maybe a, Maybe a, Maybe a))
-> ParsecT [ByteString] () Identity a
-> ParsecT [ByteString] () Identity (Maybe a, Maybe a, Maybe a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$>)
  _2 :: ParsecT [ByteString] () Identity a
-> ParsecT [ByteString] () Identity (Maybe a, Maybe a, Maybe a)
_2                         =  ((Maybe a
forall a. Maybe a
Nothing,,Maybe a
forall a. Maybe a
Nothing) (Maybe a -> (Maybe a, Maybe a, Maybe a))
-> (a -> Maybe a) -> a -> (Maybe a, Maybe a, Maybe a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. a -> Maybe a
forall a. a -> Maybe a
Just (a -> (Maybe a, Maybe a, Maybe a))
-> ParsecT [ByteString] () Identity a
-> ParsecT [ByteString] () Identity (Maybe a, Maybe a, Maybe a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$>)
  _3 :: ParsecT [ByteString] () Identity a
-> ParsecT [ByteString] () Identity (Maybe a, Maybe a, Maybe a)
_3                         =  ((Maybe a
forall a. Maybe a
Nothing,Maybe a
forall a. Maybe a
Nothing,) (Maybe a -> (Maybe a, Maybe a, Maybe a))
-> (a -> Maybe a) -> a -> (Maybe a, Maybe a, Maybe a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. a -> Maybe a
forall a. a -> Maybe a
Just (a -> (Maybe a, Maybe a, Maybe a))
-> ParsecT [ByteString] () Identity a
-> ParsecT [ByteString] () Identity (Maybe a, Maybe a, Maybe a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$>)
  coalesce :: [(Maybe a, Maybe a, Maybe a)] -> ([a], [a], [a])
coalesce                   =  ((Maybe a, Maybe a, Maybe a) -> ([a], [a], [a]) -> ([a], [a], [a]))
-> ([a], [a], [a])
-> [(Maybe a, Maybe a, Maybe a)]
-> ([a], [a], [a])
forall a b. (a -> b -> b) -> b -> [a] -> b
forall (t :: * -> *) a b.
Foldable t =>
(a -> b -> b) -> b -> t a -> b
foldr (Maybe a, Maybe a, Maybe a) -> ([a], [a], [a]) -> ([a], [a], [a])
forall {a} {a} {a}.
(Maybe a, Maybe a, Maybe a) -> ([a], [a], [a]) -> ([a], [a], [a])
f ([], [], [])
   where
    f :: (Maybe a, Maybe a, Maybe a) -> ([a], [a], [a]) -> ([a], [a], [a])
f (Just a
a, Maybe a
_, Maybe a
_) ([a]
as, [a]
bs, [a]
cs) = (a
aa -> [a] -> [a]
forall a. a -> [a] -> [a]
:[a]
as, [a]
bs, [a]
cs)
    f (Maybe a
_, Just a
b, Maybe a
_) ([a]
as, [a]
bs, [a]
cs) = ([a]
as, a
ba -> [a] -> [a]
forall a. a -> [a] -> [a]
:[a]
bs, [a]
cs)
    f (Maybe a
_, Maybe a
_, Just a
c) ([a]
as, [a]
bs, [a]
cs) = ([a]
as, [a]
bs, a
ca -> [a] -> [a]
forall a. a -> [a] -> [a]
:[a]
cs)
    f (Maybe a, Maybe a, Maybe a)
_ ([a], [a], [a])
stuff                =  ([a], [a], [a])
stuff

tmpx :: ArgsParser ( [Word], [IOStream], [IOStream], [(Sh.Var, Sh.Val)],
                     [ByteString], [(Bool, Bool)], [Bool], [ByteSource] )
tmpx :: ArgsParser
  ([Word], [IOStream], [IOStream], [(Var, Val)], [ByteString],
   [(Bool, Bool)], [Bool], [ByteSource])
tmpx                         =  do
  ByteString -> ArgsParser ByteString
arg ByteString
"tmpx"
  Maybe ByteString
bars                      <-  (ParsecT [ByteString] () Identity (Maybe ByteString)
-> ParsecT [ByteString] () Identity (Maybe ByteString)
forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m a
try (ParsecT [ByteString] () Identity (Maybe ByteString)
 -> ParsecT [ByteString] () Identity (Maybe ByteString))
-> (ParsecT [ByteString] () Identity (Maybe ByteString)
    -> ParsecT [ByteString] () Identity (Maybe ByteString))
-> ParsecT [ByteString] () Identity (Maybe ByteString)
-> ParsecT [ByteString] () Identity (Maybe ByteString)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ParsecT [ByteString] () Identity (Maybe ByteString)
-> ParsecT [ByteString] () Identity (Maybe ByteString)
forall s (m :: * -> *) t u a.
Stream s m t =>
ParsecT s u m a -> ParsecT s u m a
lookAhead) ParsecT [ByteString] () Identity (Maybe ByteString)
slashes
  [(Maybe Word, Maybe IOStream, Maybe IOStream, Maybe (Var, Val),
  Maybe ByteString, Maybe (Bool, Bool), Maybe Bool,
  Maybe ByteSource)]
-> ([Word], [IOStream], [IOStream], [(Var, Val)], [ByteString],
    [(Bool, Bool)], [Bool], [ByteSource])
forall {a} {a} {a} {a} {a} {a} {a} {a}.
[(Maybe a, Maybe a, Maybe a, Maybe a, Maybe a, Maybe a, Maybe a,
  Maybe a)]
-> ([a], [a], [a], [a], [a], [a], [a], [a])
coalesce ([(Maybe Word, Maybe IOStream, Maybe IOStream, Maybe (Var, Val),
   Maybe ByteString, Maybe (Bool, Bool), Maybe Bool,
   Maybe ByteSource)]
 -> ([Word], [IOStream], [IOStream], [(Var, Val)], [ByteString],
     [(Bool, Bool)], [Bool], [ByteSource]))
-> ParsecT
     [ByteString]
     ()
     Identity
     [(Maybe Word, Maybe IOStream, Maybe IOStream, Maybe (Var, Val),
       Maybe ByteString, Maybe (Bool, Bool), Maybe Bool,
       Maybe ByteSource)]
-> ArgsParser
     ([Word], [IOStream], [IOStream], [(Var, Val)], [ByteString],
      [(Bool, Bool)], [Bool], [ByteSource])
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> case Maybe ByteString
bars of
                 Maybe ByteString
Nothing    ->  ParsecT [ByteString] () Identity ()
-> ParsecT
     [ByteString]
     ()
     Identity
     [(Maybe Word, Maybe IOStream, Maybe IOStream, Maybe (Var, Val),
       Maybe ByteString, Maybe (Bool, Bool), Maybe Bool,
       Maybe ByteSource)]
forall {end}.
ParsecT [ByteString] () Identity end
-> ParsecT
     [ByteString]
     ()
     Identity
     [(Maybe Word, Maybe IOStream, Maybe IOStream, Maybe (Var, Val),
       Maybe ByteString, Maybe (Bool, Bool), Maybe Bool,
       Maybe ByteSource)]
flags ParsecT [ByteString] () Identity ()
forall s (m :: * -> *) t u.
(Stream s m t, Show t) =>
ParsecT s u m ()
eof
                 Just ByteString
bars  ->  do let eof_bars :: ParsecT [ByteString] () Identity ()
eof_bars = () () -> ArgsParser ByteString -> ParsecT [ByteString] () Identity ()
forall a b.
a
-> ParsecT [ByteString] () Identity b
-> ParsecT [ByteString] () Identity a
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ ByteString -> ArgsParser ByteString
arg ByteString
bars ParsecT [ByteString] () Identity ()
-> ParsecT [ByteString] () Identity ()
-> ParsecT [ByteString] () Identity ()
forall a.
ParsecT [ByteString] () Identity a
-> ParsecT [ByteString] () Identity a
-> ParsecT [ByteString] () Identity a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> ParsecT [ByteString] () Identity ()
forall s (m :: * -> *) t u.
(Stream s m t, Show t) =>
ParsecT s u m ()
eof
                                   [(Maybe Word, Maybe IOStream, Maybe IOStream, Maybe (Var, Val),
  Maybe ByteString, Maybe (Bool, Bool), Maybe Bool,
  Maybe ByteSource)]
before <- ParsecT [ByteString] () Identity ()
-> ParsecT
     [ByteString]
     ()
     Identity
     [(Maybe Word, Maybe IOStream, Maybe IOStream, Maybe (Var, Val),
       Maybe ByteString, Maybe (Bool, Bool), Maybe Bool,
       Maybe ByteSource)]
forall {end}.
ParsecT [ByteString] () Identity end
-> ParsecT
     [ByteString]
     ()
     Identity
     [(Maybe Word, Maybe IOStream, Maybe IOStream, Maybe (Var, Val),
       Maybe ByteString, Maybe (Bool, Bool), Maybe Bool,
       Maybe ByteSource)]
flags ParsecT [ByteString] () Identity ()
eof_bars
                                   (Maybe Word, Maybe IOStream, Maybe IOStream, Maybe (Var, Val),
 Maybe ByteString, Maybe (Bool, Bool), Maybe Bool, Maybe ByteSource)
cmd <- ParsecT [ByteString] () Identity ByteSource
-> ParsecT
     [ByteString]
     ()
     Identity
     (Maybe Word, Maybe IOStream, Maybe IOStream, Maybe (Var, Val),
      Maybe ByteString, Maybe (Bool, Bool), Maybe Bool, Maybe ByteSource)
forall {a} {a} {a} {a} {a} {a} {a} {a}.
ParsecT [ByteString] () Identity a
-> ParsecT
     [ByteString]
     ()
     Identity
     (Maybe a, Maybe a, Maybe a, Maybe a, Maybe a, Maybe a, Maybe a,
      Maybe a)
_8 (ParsecT [ByteString] () Identity ()
-> ParsecT [ByteString] () Identity ByteSource
forall {end}.
ParsecT [ByteString] () Identity end
-> ParsecT [ByteString] () Identity ByteSource
gather ParsecT [ByteString] () Identity ()
eof_bars)
                                   [(Maybe Word, Maybe IOStream, Maybe IOStream, Maybe (Var, Val),
  Maybe ByteString, Maybe (Bool, Bool), Maybe Bool,
  Maybe ByteSource)]
after <- ParsecT [ByteString] () Identity ()
-> ParsecT
     [ByteString]
     ()
     Identity
     [(Maybe Word, Maybe IOStream, Maybe IOStream, Maybe (Var, Val),
       Maybe ByteString, Maybe (Bool, Bool), Maybe Bool,
       Maybe ByteSource)]
forall {end}.
ParsecT [ByteString] () Identity end
-> ParsecT
     [ByteString]
     ()
     Identity
     [(Maybe Word, Maybe IOStream, Maybe IOStream, Maybe (Var, Val),
       Maybe ByteString, Maybe (Bool, Bool), Maybe Bool,
       Maybe ByteSource)]
flags ParsecT [ByteString] () Identity ()
forall s (m :: * -> *) t u.
(Stream s m t, Show t) =>
ParsecT s u m ()
eof
                                   [(Maybe Word, Maybe IOStream, Maybe IOStream, Maybe (Var, Val),
  Maybe ByteString, Maybe (Bool, Bool), Maybe Bool,
  Maybe ByteSource)]
-> ParsecT
     [ByteString]
     ()
     Identity
     [(Maybe Word, Maybe IOStream, Maybe IOStream, Maybe (Var, Val),
       Maybe ByteString, Maybe (Bool, Bool), Maybe Bool,
       Maybe ByteSource)]
forall a. a -> ParsecT [ByteString] () Identity a
forall (m :: * -> *) a. Monad m => a -> m a
return ([(Maybe Word, Maybe IOStream, Maybe IOStream, Maybe (Var, Val),
  Maybe ByteString, Maybe (Bool, Bool), Maybe Bool,
  Maybe ByteSource)]
before [(Maybe Word, Maybe IOStream, Maybe IOStream, Maybe (Var, Val),
  Maybe ByteString, Maybe (Bool, Bool), Maybe Bool,
  Maybe ByteSource)]
-> [(Maybe Word, Maybe IOStream, Maybe IOStream, Maybe (Var, Val),
     Maybe ByteString, Maybe (Bool, Bool), Maybe Bool,
     Maybe ByteSource)]
-> [(Maybe Word, Maybe IOStream, Maybe IOStream, Maybe (Var, Val),
     Maybe ByteString, Maybe (Bool, Bool), Maybe Bool,
     Maybe ByteSource)]
forall a. [a] -> [a] -> [a]
++ ((Maybe Word, Maybe IOStream, Maybe IOStream, Maybe (Var, Val),
 Maybe ByteString, Maybe (Bool, Bool), Maybe Bool, Maybe ByteSource)
cmd(Maybe Word, Maybe IOStream, Maybe IOStream, Maybe (Var, Val),
 Maybe ByteString, Maybe (Bool, Bool), Maybe Bool, Maybe ByteSource)
-> [(Maybe Word, Maybe IOStream, Maybe IOStream, Maybe (Var, Val),
     Maybe ByteString, Maybe (Bool, Bool), Maybe Bool,
     Maybe ByteSource)]
-> [(Maybe Word, Maybe IOStream, Maybe IOStream, Maybe (Var, Val),
     Maybe ByteString, Maybe (Bool, Bool), Maybe Bool,
     Maybe ByteSource)]
forall a. a -> [a] -> [a]
:[(Maybe Word, Maybe IOStream, Maybe IOStream, Maybe (Var, Val),
  Maybe ByteString, Maybe (Bool, Bool), Maybe Bool,
  Maybe ByteSource)]
after))
 where
  flags :: ParsecT [ByteString] () Identity end
-> ParsecT
     [ByteString]
     ()
     Identity
     [(Maybe Word, Maybe IOStream, Maybe IOStream, Maybe (Var, Val),
       Maybe ByteString, Maybe (Bool, Bool), Maybe Bool,
       Maybe ByteSource)]
flags                      =  ParsecT
  [ByteString]
  ()
  Identity
  (Maybe Word, Maybe IOStream, Maybe IOStream, Maybe (Var, Val),
   Maybe ByteString, Maybe (Bool, Bool), Maybe Bool, Maybe ByteSource)
-> ParsecT [ByteString] () Identity end
-> ParsecT
     [ByteString]
     ()
     Identity
     [(Maybe Word, Maybe IOStream, Maybe IOStream, Maybe (Var, Val),
       Maybe ByteString, Maybe (Bool, Bool), Maybe Bool,
       Maybe ByteSource)]
forall s (m :: * -> *) t u a end.
Stream s m t =>
ParsecT s u m a -> ParsecT s u m end -> ParsecT s u m [a]
manyTill ParsecT
  [ByteString]
  ()
  Identity
  (Maybe Word, Maybe IOStream, Maybe IOStream, Maybe (Var, Val),
   Maybe ByteString, Maybe (Bool, Bool), Maybe Bool, Maybe ByteSource)
flag
  gather :: ParsecT [ByteString] () Identity end
-> ParsecT [ByteString] () Identity ByteSource
gather = (ByteString -> ByteSource
ByteString (ByteString -> ByteSource)
-> ([ByteString] -> ByteString) -> [ByteString] -> ByteSource
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [ByteString] -> ByteString
Char8.unwords ([ByteString] -> ByteSource)
-> ParsecT [ByteString] () Identity [ByteString]
-> ParsecT [ByteString] () Identity ByteSource
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$>) (ParsecT [ByteString] () Identity [ByteString]
 -> ParsecT [ByteString] () Identity ByteSource)
-> (ParsecT [ByteString] () Identity end
    -> ParsecT [ByteString] () Identity [ByteString])
-> ParsecT [ByteString] () Identity end
-> ParsecT [ByteString] () Identity ByteSource
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ArgsParser ByteString
-> ParsecT [ByteString] () Identity end
-> ParsecT [ByteString] () Identity [ByteString]
forall s (m :: * -> *) t u a end.
Stream s m t =>
ParsecT s u m a -> ParsecT s u m end -> ParsecT s u m [a]
manyTill ArgsParser ByteString
anyArg
  flag :: ParsecT
  [ByteString]
  ()
  Identity
  (Maybe Word, Maybe IOStream, Maybe IOStream, Maybe (Var, Val),
   Maybe ByteString, Maybe (Bool, Bool), Maybe Bool, Maybe ByteSource)
flag                       =  ParsecT [ByteString] () Identity Word
-> ParsecT
     [ByteString]
     ()
     Identity
     (Maybe Word, Maybe IOStream, Maybe IOStream, Maybe (Var, Val),
      Maybe ByteString, Maybe (Bool, Bool), Maybe Bool, Maybe ByteSource)
forall {a} {a} {a} {a} {a} {a} {a} {a}.
ParsecT [ByteString] () Identity a
-> ParsecT
     [ByteString]
     ()
     Identity
     (Maybe a, Maybe a, Maybe a, Maybe a, Maybe a, Maybe a, Maybe a,
      Maybe a)
_1 ParsecT [ByteString] () Identity Word
blockSize ParsecT
  [ByteString]
  ()
  Identity
  (Maybe Word, Maybe IOStream, Maybe IOStream, Maybe (Var, Val),
   Maybe ByteString, Maybe (Bool, Bool), Maybe Bool, Maybe ByteSource)
-> ParsecT
     [ByteString]
     ()
     Identity
     (Maybe Word, Maybe IOStream, Maybe IOStream, Maybe (Var, Val),
      Maybe ByteString, Maybe (Bool, Bool), Maybe Bool, Maybe ByteSource)
-> ParsecT
     [ByteString]
     ()
     Identity
     (Maybe Word, Maybe IOStream, Maybe IOStream, Maybe (Var, Val),
      Maybe ByteString, Maybe (Bool, Bool), Maybe Bool, Maybe ByteSource)
forall a.
ParsecT [ByteString] () Identity a
-> ParsecT [ByteString] () Identity a
-> ParsecT [ByteString] () Identity a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> ParsecT [ByteString] () Identity IOStream
-> ParsecT
     [ByteString]
     ()
     Identity
     (Maybe Word, Maybe IOStream, Maybe IOStream, Maybe (Var, Val),
      Maybe ByteString, Maybe (Bool, Bool), Maybe Bool, Maybe ByteSource)
forall {a} {a} {a} {a} {a} {a} {a} {a}.
ParsecT [ByteString] () Identity a
-> ParsecT
     [ByteString]
     ()
     Identity
     (Maybe a, Maybe a, Maybe a, Maybe a, Maybe a, Maybe a, Maybe a,
      Maybe a)
_2 ParsecT [ByteString] () Identity IOStream
outputFile ParsecT
  [ByteString]
  ()
  Identity
  (Maybe Word, Maybe IOStream, Maybe IOStream, Maybe (Var, Val),
   Maybe ByteString, Maybe (Bool, Bool), Maybe Bool, Maybe ByteSource)
-> ParsecT
     [ByteString]
     ()
     Identity
     (Maybe Word, Maybe IOStream, Maybe IOStream, Maybe (Var, Val),
      Maybe ByteString, Maybe (Bool, Bool), Maybe Bool, Maybe ByteSource)
-> ParsecT
     [ByteString]
     ()
     Identity
     (Maybe Word, Maybe IOStream, Maybe IOStream, Maybe (Var, Val),
      Maybe ByteString, Maybe (Bool, Bool), Maybe Bool, Maybe ByteSource)
forall a.
ParsecT [ByteString] () Identity a
-> ParsecT [ByteString] () Identity a
-> ParsecT [ByteString] () Identity a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> ParsecT [ByteString] () Identity IOStream
-> ParsecT
     [ByteString]
     ()
     Identity
     (Maybe Word, Maybe IOStream, Maybe IOStream, Maybe (Var, Val),
      Maybe ByteString, Maybe (Bool, Bool), Maybe Bool, Maybe ByteSource)
forall {a} {a} {a} {a} {a} {a} {a} {a}.
ParsecT [ByteString] () Identity a
-> ParsecT
     [ByteString]
     ()
     Identity
     (Maybe a, Maybe a, Maybe a, Maybe a, Maybe a, Maybe a, Maybe a,
      Maybe a)
_3 ParsecT [ByteString] () Identity IOStream
ioStream
                            ParsecT
  [ByteString]
  ()
  Identity
  (Maybe Word, Maybe IOStream, Maybe IOStream, Maybe (Var, Val),
   Maybe ByteString, Maybe (Bool, Bool), Maybe Bool, Maybe ByteSource)
-> ParsecT
     [ByteString]
     ()
     Identity
     (Maybe Word, Maybe IOStream, Maybe IOStream, Maybe (Var, Val),
      Maybe ByteString, Maybe (Bool, Bool), Maybe Bool, Maybe ByteSource)
-> ParsecT
     [ByteString]
     ()
     Identity
     (Maybe Word, Maybe IOStream, Maybe IOStream, Maybe (Var, Val),
      Maybe ByteString, Maybe (Bool, Bool), Maybe Bool, Maybe ByteSource)
forall a.
ParsecT [ByteString] () Identity a
-> ParsecT [ByteString] () Identity a
-> ParsecT [ByteString] () Identity a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> ParsecT [ByteString] () Identity (Var, Val)
-> ParsecT
     [ByteString]
     ()
     Identity
     (Maybe Word, Maybe IOStream, Maybe IOStream, Maybe (Var, Val),
      Maybe ByteString, Maybe (Bool, Bool), Maybe Bool, Maybe ByteSource)
forall {a} {a} {a} {a} {a} {a} {a} {a}.
ParsecT [ByteString] () Identity a
-> ParsecT
     [ByteString]
     ()
     Identity
     (Maybe a, Maybe a, Maybe a, Maybe a, Maybe a, Maybe a, Maybe a,
      Maybe a)
_4 ParsecT [ByteString] () Identity (Var, Val)
env       ParsecT
  [ByteString]
  ()
  Identity
  (Maybe Word, Maybe IOStream, Maybe IOStream, Maybe (Var, Val),
   Maybe ByteString, Maybe (Bool, Bool), Maybe Bool, Maybe ByteSource)
-> ParsecT
     [ByteString]
     ()
     Identity
     (Maybe Word, Maybe IOStream, Maybe IOStream, Maybe (Var, Val),
      Maybe ByteString, Maybe (Bool, Bool), Maybe Bool, Maybe ByteSource)
-> ParsecT
     [ByteString]
     ()
     Identity
     (Maybe Word, Maybe IOStream, Maybe IOStream, Maybe (Var, Val),
      Maybe ByteString, Maybe (Bool, Bool), Maybe Bool, Maybe ByteSource)
forall a.
ParsecT [ByteString] () Identity a
-> ParsecT [ByteString] () Identity a
-> ParsecT [ByteString] () Identity a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> ArgsParser ByteString
-> ParsecT
     [ByteString]
     ()
     Identity
     (Maybe Word, Maybe IOStream, Maybe IOStream, Maybe (Var, Val),
      Maybe ByteString, Maybe (Bool, Bool), Maybe Bool, Maybe ByteSource)
forall {a} {a} {a} {a} {a} {a} {a} {a}.
ParsecT [ByteString] () Identity a
-> ParsecT
     [ByteString]
     ()
     Identity
     (Maybe a, Maybe a, Maybe a, Maybe a, Maybe a, Maybe a, Maybe a,
      Maybe a)
_5 ArgsParser ByteString
tmpdir     ParsecT
  [ByteString]
  ()
  Identity
  (Maybe Word, Maybe IOStream, Maybe IOStream, Maybe (Var, Val),
   Maybe ByteString, Maybe (Bool, Bool), Maybe Bool, Maybe ByteSource)
-> ParsecT
     [ByteString]
     ()
     Identity
     (Maybe Word, Maybe IOStream, Maybe IOStream, Maybe (Var, Val),
      Maybe ByteString, Maybe (Bool, Bool), Maybe Bool, Maybe ByteSource)
-> ParsecT
     [ByteString]
     ()
     Identity
     (Maybe Word, Maybe IOStream, Maybe IOStream, Maybe (Var, Val),
      Maybe ByteString, Maybe (Bool, Bool), Maybe Bool, Maybe ByteSource)
forall a.
ParsecT [ByteString] () Identity a
-> ParsecT [ByteString] () Identity a
-> ParsecT [ByteString] () Identity a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> ParsecT [ByteString] () Identity (Bool, Bool)
-> ParsecT
     [ByteString]
     ()
     Identity
     (Maybe Word, Maybe IOStream, Maybe IOStream, Maybe (Var, Val),
      Maybe ByteString, Maybe (Bool, Bool), Maybe Bool, Maybe ByteSource)
forall {a} {a} {a} {a} {a} {a} {a} {a}.
ParsecT [ByteString] () Identity a
-> ParsecT
     [ByteString]
     ()
     Identity
     (Maybe a, Maybe a, Maybe a, Maybe a, Maybe a, Maybe a, Maybe a,
      Maybe a)
_6 ParsecT [ByteString] () Identity (Bool, Bool)
rm
                            ParsecT
  [ByteString]
  ()
  Identity
  (Maybe Word, Maybe IOStream, Maybe IOStream, Maybe (Var, Val),
   Maybe ByteString, Maybe (Bool, Bool), Maybe Bool, Maybe ByteSource)
-> ParsecT
     [ByteString]
     ()
     Identity
     (Maybe Word, Maybe IOStream, Maybe IOStream, Maybe (Var, Val),
      Maybe ByteString, Maybe (Bool, Bool), Maybe Bool, Maybe ByteSource)
-> ParsecT
     [ByteString]
     ()
     Identity
     (Maybe Word, Maybe IOStream, Maybe IOStream, Maybe (Var, Val),
      Maybe ByteString, Maybe (Bool, Bool), Maybe Bool, Maybe ByteSource)
forall a.
ParsecT [ByteString] () Identity a
-> ParsecT [ByteString] () Identity a
-> ParsecT [ByteString] () Identity a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> ParsecT [ByteString] () Identity Bool
-> ParsecT
     [ByteString]
     ()
     Identity
     (Maybe Word, Maybe IOStream, Maybe IOStream, Maybe (Var, Val),
      Maybe ByteString, Maybe (Bool, Bool), Maybe Bool, Maybe ByteSource)
forall {a} {a} {a} {a} {a} {a} {a} {a}.
ParsecT [ByteString] () Identity a
-> ParsecT
     [ByteString]
     ()
     Identity
     (Maybe a, Maybe a, Maybe a, Maybe a, Maybe a, Maybe a, Maybe a,
      Maybe a)
_7 ParsecT [ByteString] () Identity Bool
shared    ParsecT
  [ByteString]
  ()
  Identity
  (Maybe Word, Maybe IOStream, Maybe IOStream, Maybe (Var, Val),
   Maybe ByteString, Maybe (Bool, Bool), Maybe Bool, Maybe ByteSource)
-> ParsecT
     [ByteString]
     ()
     Identity
     (Maybe Word, Maybe IOStream, Maybe IOStream, Maybe (Var, Val),
      Maybe ByteString, Maybe (Bool, Bool), Maybe Bool, Maybe ByteSource)
-> ParsecT
     [ByteString]
     ()
     Identity
     (Maybe Word, Maybe IOStream, Maybe IOStream, Maybe (Var, Val),
      Maybe ByteString, Maybe (Bool, Bool), Maybe Bool, Maybe ByteSource)
forall a.
ParsecT [ByteString] () Identity a
-> ParsecT [ByteString] () Identity a
-> ParsecT [ByteString] () Identity a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> ParsecT [ByteString] () Identity ByteSource
-> ParsecT
     [ByteString]
     ()
     Identity
     (Maybe Word, Maybe IOStream, Maybe IOStream, Maybe (Var, Val),
      Maybe ByteString, Maybe (Bool, Bool), Maybe Bool, Maybe ByteSource)
forall {a} {a} {a} {a} {a} {a} {a} {a}.
ParsecT [ByteString] () Identity a
-> ParsecT
     [ByteString]
     ()
     Identity
     (Maybe a, Maybe a, Maybe a, Maybe a, Maybe a, Maybe a, Maybe a,
      Maybe a)
_8 ParsecT [ByteString] () Identity ByteSource
scriptToRun
  _1 :: ParsecT [ByteString] () Identity a
-> ParsecT
     [ByteString]
     ()
     Identity
     (Maybe a, Maybe a, Maybe a, Maybe a, Maybe a, Maybe a, Maybe a,
      Maybe a)
_1 = ((,Maybe a
forall a. Maybe a
Nothing,Maybe a
forall a. Maybe a
Nothing,Maybe a
forall a. Maybe a
Nothing,Maybe a
forall a. Maybe a
Nothing,Maybe a
forall a. Maybe a
Nothing,Maybe a
forall a. Maybe a
Nothing,Maybe a
forall a. Maybe a
Nothing) (Maybe a
 -> (Maybe a, Maybe a, Maybe a, Maybe a, Maybe a, Maybe a, Maybe a,
     Maybe a))
-> (a -> Maybe a)
-> a
-> (Maybe a, Maybe a, Maybe a, Maybe a, Maybe a, Maybe a, Maybe a,
    Maybe a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. a -> Maybe a
forall a. a -> Maybe a
Just (a
 -> (Maybe a, Maybe a, Maybe a, Maybe a, Maybe a, Maybe a, Maybe a,
     Maybe a))
-> ParsecT [ByteString] () Identity a
-> ParsecT
     [ByteString]
     ()
     Identity
     (Maybe a, Maybe a, Maybe a, Maybe a, Maybe a, Maybe a, Maybe a,
      Maybe a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$>)
  _2 :: ParsecT [ByteString] () Identity a
-> ParsecT
     [ByteString]
     ()
     Identity
     (Maybe a, Maybe a, Maybe a, Maybe a, Maybe a, Maybe a, Maybe a,
      Maybe a)
_2 = ((Maybe a
forall a. Maybe a
Nothing,,Maybe a
forall a. Maybe a
Nothing,Maybe a
forall a. Maybe a
Nothing,Maybe a
forall a. Maybe a
Nothing,Maybe a
forall a. Maybe a
Nothing,Maybe a
forall a. Maybe a
Nothing,Maybe a
forall a. Maybe a
Nothing) (Maybe a
 -> (Maybe a, Maybe a, Maybe a, Maybe a, Maybe a, Maybe a, Maybe a,
     Maybe a))
-> (a -> Maybe a)
-> a
-> (Maybe a, Maybe a, Maybe a, Maybe a, Maybe a, Maybe a, Maybe a,
    Maybe a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. a -> Maybe a
forall a. a -> Maybe a
Just (a
 -> (Maybe a, Maybe a, Maybe a, Maybe a, Maybe a, Maybe a, Maybe a,
     Maybe a))
-> ParsecT [ByteString] () Identity a
-> ParsecT
     [ByteString]
     ()
     Identity
     (Maybe a, Maybe a, Maybe a, Maybe a, Maybe a, Maybe a, Maybe a,
      Maybe a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$>)
  _3 :: ParsecT [ByteString] () Identity a
-> ParsecT
     [ByteString]
     ()
     Identity
     (Maybe a, Maybe a, Maybe a, Maybe a, Maybe a, Maybe a, Maybe a,
      Maybe a)
_3 = ((Maybe a
forall a. Maybe a
Nothing,Maybe a
forall a. Maybe a
Nothing,,Maybe a
forall a. Maybe a
Nothing,Maybe a
forall a. Maybe a
Nothing,Maybe a
forall a. Maybe a
Nothing,Maybe a
forall a. Maybe a
Nothing,Maybe a
forall a. Maybe a
Nothing) (Maybe a
 -> (Maybe a, Maybe a, Maybe a, Maybe a, Maybe a, Maybe a, Maybe a,
     Maybe a))
-> (a -> Maybe a)
-> a
-> (Maybe a, Maybe a, Maybe a, Maybe a, Maybe a, Maybe a, Maybe a,
    Maybe a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. a -> Maybe a
forall a. a -> Maybe a
Just (a
 -> (Maybe a, Maybe a, Maybe a, Maybe a, Maybe a, Maybe a, Maybe a,
     Maybe a))
-> ParsecT [ByteString] () Identity a
-> ParsecT
     [ByteString]
     ()
     Identity
     (Maybe a, Maybe a, Maybe a, Maybe a, Maybe a, Maybe a, Maybe a,
      Maybe a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$>)
  _4 :: ParsecT [ByteString] () Identity a
-> ParsecT
     [ByteString]
     ()
     Identity
     (Maybe a, Maybe a, Maybe a, Maybe a, Maybe a, Maybe a, Maybe a,
      Maybe a)
_4 = ((Maybe a
forall a. Maybe a
Nothing,Maybe a
forall a. Maybe a
Nothing,Maybe a
forall a. Maybe a
Nothing,,Maybe a
forall a. Maybe a
Nothing,Maybe a
forall a. Maybe a
Nothing,Maybe a
forall a. Maybe a
Nothing,Maybe a
forall a. Maybe a
Nothing) (Maybe a
 -> (Maybe a, Maybe a, Maybe a, Maybe a, Maybe a, Maybe a, Maybe a,
     Maybe a))
-> (a -> Maybe a)
-> a
-> (Maybe a, Maybe a, Maybe a, Maybe a, Maybe a, Maybe a, Maybe a,
    Maybe a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. a -> Maybe a
forall a. a -> Maybe a
Just (a
 -> (Maybe a, Maybe a, Maybe a, Maybe a, Maybe a, Maybe a, Maybe a,
     Maybe a))
-> ParsecT [ByteString] () Identity a
-> ParsecT
     [ByteString]
     ()
     Identity
     (Maybe a, Maybe a, Maybe a, Maybe a, Maybe a, Maybe a, Maybe a,
      Maybe a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$>)
  _5 :: ParsecT [ByteString] () Identity a
-> ParsecT
     [ByteString]
     ()
     Identity
     (Maybe a, Maybe a, Maybe a, Maybe a, Maybe a, Maybe a, Maybe a,
      Maybe a)
_5 = ((Maybe a
forall a. Maybe a
Nothing,Maybe a
forall a. Maybe a
Nothing,Maybe a
forall a. Maybe a
Nothing,Maybe a
forall a. Maybe a
Nothing,,Maybe a
forall a. Maybe a
Nothing,Maybe a
forall a. Maybe a
Nothing,Maybe a
forall a. Maybe a
Nothing) (Maybe a
 -> (Maybe a, Maybe a, Maybe a, Maybe a, Maybe a, Maybe a, Maybe a,
     Maybe a))
-> (a -> Maybe a)
-> a
-> (Maybe a, Maybe a, Maybe a, Maybe a, Maybe a, Maybe a, Maybe a,
    Maybe a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. a -> Maybe a
forall a. a -> Maybe a
Just (a
 -> (Maybe a, Maybe a, Maybe a, Maybe a, Maybe a, Maybe a, Maybe a,
     Maybe a))
-> ParsecT [ByteString] () Identity a
-> ParsecT
     [ByteString]
     ()
     Identity
     (Maybe a, Maybe a, Maybe a, Maybe a, Maybe a, Maybe a, Maybe a,
      Maybe a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$>)
  _6 :: ParsecT [ByteString] () Identity a
-> ParsecT
     [ByteString]
     ()
     Identity
     (Maybe a, Maybe a, Maybe a, Maybe a, Maybe a, Maybe a, Maybe a,
      Maybe a)
_6 = ((Maybe a
forall a. Maybe a
Nothing,Maybe a
forall a. Maybe a
Nothing,Maybe a
forall a. Maybe a
Nothing,Maybe a
forall a. Maybe a
Nothing,Maybe a
forall a. Maybe a
Nothing,,Maybe a
forall a. Maybe a
Nothing,Maybe a
forall a. Maybe a
Nothing) (Maybe a
 -> (Maybe a, Maybe a, Maybe a, Maybe a, Maybe a, Maybe a, Maybe a,
     Maybe a))
-> (a -> Maybe a)
-> a
-> (Maybe a, Maybe a, Maybe a, Maybe a, Maybe a, Maybe a, Maybe a,
    Maybe a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. a -> Maybe a
forall a. a -> Maybe a
Just (a
 -> (Maybe a, Maybe a, Maybe a, Maybe a, Maybe a, Maybe a, Maybe a,
     Maybe a))
-> ParsecT [ByteString] () Identity a
-> ParsecT
     [ByteString]
     ()
     Identity
     (Maybe a, Maybe a, Maybe a, Maybe a, Maybe a, Maybe a, Maybe a,
      Maybe a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$>)
  _7 :: ParsecT [ByteString] () Identity a
-> ParsecT
     [ByteString]
     ()
     Identity
     (Maybe a, Maybe a, Maybe a, Maybe a, Maybe a, Maybe a, Maybe a,
      Maybe a)
_7 = ((Maybe a
forall a. Maybe a
Nothing,Maybe a
forall a. Maybe a
Nothing,Maybe a
forall a. Maybe a
Nothing,Maybe a
forall a. Maybe a
Nothing,Maybe a
forall a. Maybe a
Nothing,Maybe a
forall a. Maybe a
Nothing,,Maybe a
forall a. Maybe a
Nothing) (Maybe a
 -> (Maybe a, Maybe a, Maybe a, Maybe a, Maybe a, Maybe a, Maybe a,
     Maybe a))
-> (a -> Maybe a)
-> a
-> (Maybe a, Maybe a, Maybe a, Maybe a, Maybe a, Maybe a, Maybe a,
    Maybe a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. a -> Maybe a
forall a. a -> Maybe a
Just (a
 -> (Maybe a, Maybe a, Maybe a, Maybe a, Maybe a, Maybe a, Maybe a,
     Maybe a))
-> ParsecT [ByteString] () Identity a
-> ParsecT
     [ByteString]
     ()
     Identity
     (Maybe a, Maybe a, Maybe a, Maybe a, Maybe a, Maybe a, Maybe a,
      Maybe a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$>)
  _8 :: ParsecT [ByteString] () Identity a
-> ParsecT
     [ByteString]
     ()
     Identity
     (Maybe a, Maybe a, Maybe a, Maybe a, Maybe a, Maybe a, Maybe a,
      Maybe a)
_8 = ((Maybe a
forall a. Maybe a
Nothing,Maybe a
forall a. Maybe a
Nothing,Maybe a
forall a. Maybe a
Nothing,Maybe a
forall a. Maybe a
Nothing,Maybe a
forall a. Maybe a
Nothing,Maybe a
forall a. Maybe a
Nothing,Maybe a
forall a. Maybe a
Nothing,) (Maybe a
 -> (Maybe a, Maybe a, Maybe a, Maybe a, Maybe a, Maybe a, Maybe a,
     Maybe a))
-> (a -> Maybe a)
-> a
-> (Maybe a, Maybe a, Maybe a, Maybe a, Maybe a, Maybe a, Maybe a,
    Maybe a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. a -> Maybe a
forall a. a -> Maybe a
Just (a
 -> (Maybe a, Maybe a, Maybe a, Maybe a, Maybe a, Maybe a, Maybe a,
     Maybe a))
-> ParsecT [ByteString] () Identity a
-> ParsecT
     [ByteString]
     ()
     Identity
     (Maybe a, Maybe a, Maybe a, Maybe a, Maybe a, Maybe a, Maybe a,
      Maybe a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$>)
  coalesce :: [(Maybe a, Maybe a, Maybe a, Maybe a, Maybe a, Maybe a, Maybe a,
  Maybe a)]
-> ([a], [a], [a], [a], [a], [a], [a], [a])
coalesce                   =  ((Maybe a, Maybe a, Maybe a, Maybe a, Maybe a, Maybe a, Maybe a,
  Maybe a)
 -> ([a], [a], [a], [a], [a], [a], [a], [a])
 -> ([a], [a], [a], [a], [a], [a], [a], [a]))
-> ([a], [a], [a], [a], [a], [a], [a], [a])
-> [(Maybe a, Maybe a, Maybe a, Maybe a, Maybe a, Maybe a, Maybe a,
     Maybe a)]
-> ([a], [a], [a], [a], [a], [a], [a], [a])
forall a b. (a -> b -> b) -> b -> [a] -> b
forall (t :: * -> *) a b.
Foldable t =>
(a -> b -> b) -> b -> t a -> b
foldr (Maybe a, Maybe a, Maybe a, Maybe a, Maybe a, Maybe a, Maybe a,
 Maybe a)
-> ([a], [a], [a], [a], [a], [a], [a], [a])
-> ([a], [a], [a], [a], [a], [a], [a], [a])
forall {a} {a} {a} {a} {a} {a} {a} {a}.
(Maybe a, Maybe a, Maybe a, Maybe a, Maybe a, Maybe a, Maybe a,
 Maybe a)
-> ([a], [a], [a], [a], [a], [a], [a], [a])
-> ([a], [a], [a], [a], [a], [a], [a], [a])
f ([], [], [], [], [], [], [], [])
   where
    f :: (Maybe a, Maybe a, Maybe a, Maybe a, Maybe a, Maybe a, Maybe a,
 Maybe a)
-> ([a], [a], [a], [a], [a], [a], [a], [a])
-> ([a], [a], [a], [a], [a], [a], [a], [a])
f (Just a
a, Maybe a
_, Maybe a
_, Maybe a
_, Maybe a
_, Maybe a
_, Maybe a
_, Maybe a
_)   ([a]
as, [a]
bs, [a]
cs, [a]
ds, [a]
es, [a]
fs, [a]
gs, [a]
hs)
                                =  (a
aa -> [a] -> [a]
forall a. a -> [a] -> [a]
:[a]
as, [a]
bs, [a]
cs, [a]
ds, [a]
es, [a]
fs, [a]
gs, [a]
hs)
    f (Maybe a
_, Just a
b, Maybe a
_, Maybe a
_, Maybe a
_, Maybe a
_, Maybe a
_, Maybe a
_)   ([a]
as, [a]
bs, [a]
cs, [a]
ds, [a]
es, [a]
fs, [a]
gs, [a]
hs)
                                =  ([a]
as, a
ba -> [a] -> [a]
forall a. a -> [a] -> [a]
:[a]
bs, [a]
cs, [a]
ds, [a]
es, [a]
fs, [a]
gs, [a]
hs)
    f (Maybe a
_, Maybe a
_, Just a
c, Maybe a
_, Maybe a
_, Maybe a
_, Maybe a
_, Maybe a
_)   ([a]
as, [a]
bs, [a]
cs, [a]
ds, [a]
es, [a]
fs, [a]
gs, [a]
hs)
                                =  ([a]
as, [a]
bs, a
ca -> [a] -> [a]
forall a. a -> [a] -> [a]
:[a]
cs, [a]
ds, [a]
es, [a]
fs, [a]
gs, [a]
hs)
    f (Maybe a
_, Maybe a
_, Maybe a
_, Just a
d, Maybe a
_, Maybe a
_, Maybe a
_, Maybe a
_)   ([a]
as, [a]
bs, [a]
cs, [a]
ds, [a]
es, [a]
fs, [a]
gs, [a]
hs)
                                =  ([a]
as, [a]
bs, [a]
cs, a
da -> [a] -> [a]
forall a. a -> [a] -> [a]
:[a]
ds, [a]
es, [a]
fs, [a]
gs, [a]
hs)
    f (Maybe a
_, Maybe a
_, Maybe a
_, Maybe a
_, Just a
e, Maybe a
_, Maybe a
_, Maybe a
_)   ([a]
as, [a]
bs, [a]
cs, [a]
ds, [a]
es, [a]
fs, [a]
gs, [a]
hs)
                                =  ([a]
as, [a]
bs, [a]
cs, [a]
ds, a
ea -> [a] -> [a]
forall a. a -> [a] -> [a]
:[a]
es, [a]
fs, [a]
gs, [a]
hs)
    f (Maybe a
_, Maybe a
_, Maybe a
_, Maybe a
_, Maybe a
_, Just a
f, Maybe a
_, Maybe a
_)   ([a]
as, [a]
bs, [a]
cs, [a]
ds, [a]
es, [a]
fs, [a]
gs, [a]
hs)
                                =  ([a]
as, [a]
bs, [a]
cs, [a]
ds, [a]
es, a
fa -> [a] -> [a]
forall a. a -> [a] -> [a]
:[a]
fs, [a]
gs, [a]
hs)
    f (Maybe a
_, Maybe a
_, Maybe a
_, Maybe a
_, Maybe a
_, Maybe a
_, Just a
g, Maybe a
_)   ([a]
as, [a]
bs, [a]
cs, [a]
ds, [a]
es, [a]
fs, [a]
gs, [a]
hs)
                                =  ([a]
as, [a]
bs, [a]
cs, [a]
ds, [a]
es, [a]
fs, a
ga -> [a] -> [a]
forall a. a -> [a] -> [a]
:[a]
gs, [a]
hs)
    f (Maybe a
_, Maybe a
_, Maybe a
_, Maybe a
_, Maybe a
_, Maybe a
_, Maybe a
_, Just a
h)   ([a]
as, [a]
bs, [a]
cs, [a]
ds, [a]
es, [a]
fs, [a]
gs, [a]
hs)
                                =  ([a]
as, [a]
bs, [a]
cs, [a]
ds, [a]
es, [a]
fs, [a]
gs, a
ha -> [a] -> [a]
forall a. a -> [a] -> [a]
:[a]
hs)
    f (Maybe a, Maybe a, Maybe a, Maybe a, Maybe a, Maybe a, Maybe a,
 Maybe a)
_ ([a], [a], [a], [a], [a], [a], [a], [a])
stuff                   =  ([a], [a], [a], [a], [a], [a], [a], [a])
stuff

blockSize                   ::  ArgsParser Word
blockSize :: ParsecT [ByteString] () Identity Word
blockSize                    =  do ByteString -> ArgsParser ByteString
arg ByteString
"-b"
                                   Parser Word
forall b. (Bounded b, Integral b) => Parser b
CLTokens.sizeBounded Parser Word
-> ArgsParser ByteString -> ParsecT [ByteString] () Identity Word
forall t. Parser t -> ArgsParser ByteString -> ArgsParser t
<@> Class -> ArgsParser ByteString
tokCL Class
Size

outputFile                  ::  ArgsParser IOStream
outputFile :: ParsecT [ByteString] () Identity IOStream
outputFile                   =  ByteString -> ArgsParser ByteString
arg ByteString
"-o" ArgsParser ByteString
-> ParsecT [ByteString] () Identity IOStream
-> ParsecT [ByteString] () Identity IOStream
forall a b.
ParsecT [ByteString] () Identity a
-> ParsecT [ByteString] () Identity b
-> ParsecT [ByteString] () Identity b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> ParsecT [ByteString] () Identity IOStream
ioStream

ioStream                    ::  ArgsParser IOStream
ioStream :: ParsecT [ByteString] () Identity IOStream
ioStream                     =  IOStream
STDIO IOStream
-> ArgsParser ByteString
-> ParsecT [ByteString] () Identity IOStream
forall a b.
a
-> ParsecT [ByteString] () Identity b
-> ParsecT [ByteString] () Identity a
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$  Class -> ArgsParser ByteString
tokCL Class
Dash
                            ParsecT [ByteString] () Identity IOStream
-> ParsecT [ByteString] () Identity IOStream
-> ParsecT [ByteString] () Identity IOStream
forall a.
ParsecT [ByteString] () Identity a
-> ParsecT [ByteString] () Identity a
-> ParsecT [ByteString] () Identity a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> ByteString -> IOStream
Path  (ByteString -> IOStream)
-> ArgsParser ByteString
-> ParsecT [ByteString] () Identity IOStream
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Class -> ArgsParser ByteString
tokCL Class
QualifiedPath

qPath                       ::  ArgsParser ByteString
qPath :: ArgsParser ByteString
qPath                        =  Class -> ArgsParser ByteString
tokCL Class
QualifiedPath

shared                      ::  ArgsParser Bool
shared :: ParsecT [ByteString] () Identity Bool
shared                       =  Bool
True Bool
-> ArgsParser ByteString -> ParsecT [ByteString] () Identity Bool
forall a b.
a
-> ParsecT [ByteString] () Identity b
-> ParsecT [ByteString] () Identity a
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ ByteString -> ArgsParser ByteString
arg ByteString
"--shared"

tmpdir                      ::  ArgsParser ByteString
tmpdir :: ArgsParser ByteString
tmpdir                       =  ByteString -> ArgsParser ByteString
arg ByteString
"--tmpdir" ArgsParser ByteString
-> ArgsParser ByteString -> ArgsParser ByteString
forall a b.
ParsecT [ByteString] () Identity a
-> ParsecT [ByteString] () Identity b
-> ParsecT [ByteString] () Identity b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> Class -> ArgsParser ByteString
tokCL Class
QualifiedPath

rm                          ::  ArgsParser (Bool, Bool)
rm :: ParsecT [ByteString] () Identity (Bool, Bool)
rm  =   (Bool
True,  Bool
False) (Bool, Bool)
-> ArgsParser ByteString
-> ParsecT [ByteString] () Identity (Bool, Bool)
forall a b.
a
-> ParsecT [ByteString] () Identity b
-> ParsecT [ByteString] () Identity a
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ ByteString -> ArgsParser ByteString
arg ByteString
"-rm0"  ParsecT [ByteString] () Identity (Bool, Bool)
-> ParsecT [ByteString] () Identity (Bool, Bool)
-> ParsecT [ByteString] () Identity (Bool, Bool)
forall a.
ParsecT [ByteString] () Identity a
-> ParsecT [ByteString] () Identity a
-> ParsecT [ByteString] () Identity a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|>  (Bool
False, Bool
True) (Bool, Bool)
-> ArgsParser ByteString
-> ParsecT [ByteString] () Identity (Bool, Bool)
forall a b.
a
-> ParsecT [ByteString] () Identity b
-> ParsecT [ByteString] () Identity a
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ ByteString -> ArgsParser ByteString
arg ByteString
"-rm1"
   ParsecT [ByteString] () Identity (Bool, Bool)
-> ParsecT [ByteString] () Identity (Bool, Bool)
-> ParsecT [ByteString] () Identity (Bool, Bool)
forall a.
ParsecT [ByteString] () Identity a
-> ParsecT [ByteString] () Identity a
-> ParsecT [ByteString] () Identity a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|>  (Bool
False, Bool
False) (Bool, Bool)
-> ArgsParser ByteString
-> ParsecT [ByteString] () Identity (Bool, Bool)
forall a b.
a
-> ParsecT [ByteString] () Identity b
-> ParsecT [ByteString] () Identity a
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ ByteString -> ArgsParser ByteString
arg ByteString
"-rm!"  ParsecT [ByteString] () Identity (Bool, Bool)
-> ParsecT [ByteString] () Identity (Bool, Bool)
-> ParsecT [ByteString] () Identity (Bool, Bool)
forall a.
ParsecT [ByteString] () Identity a
-> ParsecT [ByteString] () Identity a
-> ParsecT [ByteString] () Identity a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|>  (Bool
True,  Bool
True) (Bool, Bool)
-> ArgsParser ByteString
-> ParsecT [ByteString] () Identity (Bool, Bool)
forall a b.
a
-> ParsecT [ByteString] () Identity b
-> ParsecT [ByteString] () Identity a
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ ByteString -> ArgsParser ByteString
arg ByteString
"-rm_"

env                         ::  ArgsParser (Sh.Var, Sh.Val)
env :: ParsecT [ByteString] () Identity (Var, Val)
env                          =  do
  (ByteString
var, ByteString
assignment)         <-  (Char -> Bool) -> ByteString -> (ByteString, ByteString)
Char8.break (Char -> Char -> Bool
forall a. Eq a => a -> a -> Bool
== Char
'=') (ByteString -> (ByteString, ByteString))
-> ArgsParser ByteString
-> ParsecT [ByteString] () Identity (ByteString, ByteString)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Class -> ArgsParser ByteString
tokCL Class
EnvBinding
  case (,) (Var -> Val -> (Var, Val))
-> Maybe Var -> Maybe (Val -> (Var, Val))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ByteString -> Maybe Var
Sh.var ByteString
var Maybe (Val -> (Var, Val)) -> Maybe Val -> Maybe (Var, Val)
forall a b. Maybe (a -> b) -> Maybe a -> Maybe b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> ByteString -> Maybe Val
Sh.val (Int -> ByteString -> ByteString
Bytes.drop Int
1 ByteString
assignment) of
    Maybe (Var, Val)
Nothing                 ->  ParsecT [ByteString] () Identity (Var, Val)
forall a. ParsecT [ByteString] () Identity a
forall (m :: * -> *) a. MonadPlus m => m a
mzero
    Just (Var, Val)
x                  ->  (Var, Val) -> ParsecT [ByteString] () Identity (Var, Val)
forall a. a -> ParsecT [ByteString] () Identity a
forall (m :: * -> *) a. Monad m => a -> m a
return (Var, Val)
x

scriptToRun                 ::  ArgsParser ByteSource
scriptToRun :: ParsecT [ByteString] () Identity ByteSource
scriptToRun                  =  ByteString -> ArgsParser ByteString
arg ByteString
"-e" ArgsParser ByteString
-> ParsecT [ByteString] () Identity ByteSource
-> ParsecT [ByteString] () Identity ByteSource
forall a b.
ParsecT [ByteString] () Identity a
-> ParsecT [ByteString] () Identity b
-> ParsecT [ByteString] () Identity b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> IOStream -> ByteSource
IOStream (IOStream -> ByteSource)
-> ParsecT [ByteString] () Identity IOStream
-> ParsecT [ByteString] () Identity ByteSource
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ParsecT [ByteString] () Identity IOStream
ioStream

cmd                         ::  ByteString -> ArgsParser ByteSource
cmd :: ByteString -> ParsecT [ByteString] () Identity ByteSource
cmd ByteString
bars = ByteString -> ByteSource
ByteString (ByteString -> ByteSource)
-> ([ByteString] -> ByteString) -> [ByteString] -> ByteSource
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [ByteString] -> ByteString
Char8.unwords ([ByteString] -> ByteSource)
-> ParsecT [ByteString] () Identity [ByteString]
-> ParsecT [ByteString] () Identity ByteSource
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ByteString
-> ByteString
-> ArgsParser ByteString
-> ParsecT [ByteString] () Identity [ByteString]
forall {a}.
ByteString
-> ByteString
-> ParsecT [ByteString] () Identity a
-> ParsecT [ByteString] () Identity [a]
bracketed ByteString
bars ByteString
bars ArgsParser ByteString
anyArg
 where
  bracketed :: ByteString
-> ByteString
-> ParsecT [ByteString] () Identity a
-> ParsecT [ByteString] () Identity [a]
bracketed ByteString
start ByteString
end ParsecT [ByteString] () Identity a
p      =  ByteString -> ArgsParser ByteString
arg ByteString
start ArgsParser ByteString
-> ParsecT [ByteString] () Identity [a]
-> ParsecT [ByteString] () Identity [a]
forall a b.
ParsecT [ByteString] () Identity a
-> ParsecT [ByteString] () Identity b
-> ParsecT [ByteString] () Identity b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> ParsecT [ByteString] () Identity a
-> ParsecT [ByteString] () Identity ()
-> ParsecT [ByteString] () Identity [a]
forall s (m :: * -> *) t u a end.
Stream s m t =>
ParsecT s u m a -> ParsecT s u m end -> ParsecT s u m [a]
manyTill ParsecT [ByteString] () Identity a
p (ParsecT [ByteString] () Identity ()
forall s (m :: * -> *) t u.
(Stream s m t, Show t) =>
ParsecT s u m ()
eof ParsecT [ByteString] () Identity ()
-> ParsecT [ByteString] () Identity ()
-> ParsecT [ByteString] () Identity ()
forall a.
ParsecT [ByteString] () Identity a
-> ParsecT [ByteString] () Identity a
-> ParsecT [ByteString] () Identity a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> () () -> ArgsParser ByteString -> ParsecT [ByteString] () Identity ()
forall a b.
a
-> ParsecT [ByteString] () Identity b
-> ParsecT [ByteString] () Identity a
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ ByteString -> ArgsParser ByteString
arg ByteString
end)


{-| A byte-oriented store that can be read from or written to in a streaming
    fashion.
 -}
data IOStream                =  STDIO | Path !ByteString
deriving instance Eq IOStream
deriving instance Ord IOStream
deriving instance Show IOStream

{-| A source of bytes (no writing, only reading).
 -}
data ByteSource              =  ByteString !ByteString | IOStream !IOStream
deriving instance Eq ByteSource
deriving instance Ord ByteSource
deriving instance Show ByteSource


type ArgsParser              =  Parsec [ByteString] ()

satisfy                     ::  (ByteString -> Bool) -> ArgsParser ByteString
satisfy :: (ByteString -> Bool) -> ArgsParser ByteString
satisfy ByteString -> Bool
p                    =  (ByteString -> Maybe ByteString) -> ArgsParser ByteString
forall t. (ByteString -> Maybe t) -> ArgsParser t
argPrim ByteString -> Maybe ByteString
test
 where
  test :: ByteString -> Maybe ByteString
test ByteString
b                     =  Bool -> Maybe ()
forall (f :: * -> *). Alternative f => Bool -> f ()
guard (ByteString -> Bool
p ByteString
b) Maybe () -> Maybe ByteString -> Maybe ByteString
forall a b. Maybe a -> Maybe b -> Maybe b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> ByteString -> Maybe ByteString
forall a. a -> Maybe a
Just ByteString
b

anyArg                      ::  ArgsParser ByteString
anyArg :: ArgsParser ByteString
anyArg                       =  (ByteString -> Maybe ByteString) -> ArgsParser ByteString
forall t. (ByteString -> Maybe t) -> ArgsParser t
argPrim ByteString -> Maybe ByteString
forall a. a -> Maybe a
Just

arg                         ::  ByteString -> ArgsParser ByteString
arg :: ByteString -> ArgsParser ByteString
arg ByteString
b                        =  (ByteString -> Bool) -> ArgsParser ByteString
satisfy (ByteString -> ByteString -> Bool
forall a. Eq a => a -> a -> Bool
== ByteString
b)

argPrim                     ::  (ByteString -> Maybe t) -> ArgsParser t
argPrim :: forall t. (ByteString -> Maybe t) -> ArgsParser t
argPrim                      =  (ByteString -> String)
-> (SourcePos -> ByteString -> [ByteString] -> SourcePos)
-> (ByteString -> Maybe t)
-> ParsecT [ByteString] () Identity t
forall s (m :: * -> *) t a u.
Stream s m t =>
(t -> String)
-> (SourcePos -> t -> s -> SourcePos)
-> (t -> Maybe a)
-> ParsecT s u m a
tokenPrim ByteString -> String
forall a. Show a => a -> String
show SourcePos -> ByteString -> [ByteString] -> SourcePos
forall {p} {p}. SourcePos -> p -> p -> SourcePos
next
 where
  next :: SourcePos -> p -> p -> SourcePos
next SourcePos
pos p
_ p
_               =  SourcePos -> Int -> SourcePos
incSourceLine SourcePos
pos Int
1

(<@>) :: Attoparsec.Parser t -> ArgsParser ByteString -> ArgsParser t
Parser t
atto <@> :: forall t. Parser t -> ArgsParser ByteString -> ArgsParser t
<@> ArgsParser ByteString
parsec              =  do
  Either String t
res                       <-  Parser t -> ByteString -> Either String t
forall a. Parser a -> ByteString -> Either String a
Attoparsec.parseOnly Parser t
atto (ByteString -> Either String t)
-> ArgsParser ByteString
-> ParsecT [ByteString] () Identity (Either String t)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ArgsParser ByteString
parsec
  case Either String t
res of Left String
_        ->  ArgsParser t
forall a. ParsecT [ByteString] () Identity a
forall (m :: * -> *) a. MonadPlus m => m a
mzero
              Right t
x       ->  t -> ArgsParser t
forall a. a -> ParsecT [ByteString] () Identity a
forall (m :: * -> *) a. Monad m => a -> m a
return t
x
infixl 4 <@>

tokCL                       ::  Class -> ArgsParser ByteString
tokCL :: Class -> ArgsParser ByteString
tokCL Class
tokenClass             =  (ByteString -> Bool) -> ArgsParser ByteString
satisfy (Class -> ByteString -> Bool
CLTokens.match Class
tokenClass)

slashes                     ::  ArgsParser (Maybe ByteString)
slashes :: ParsecT [ByteString] () Identity (Maybe ByteString)
slashes = [ByteString] -> Maybe ByteString
forall a. [a] -> Maybe a
listToMaybe ([ByteString] -> Maybe ByteString)
-> ([Maybe ByteString] -> [ByteString])
-> [Maybe ByteString]
-> Maybe ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [ByteString] -> [ByteString]
longestFirst ([ByteString] -> [ByteString])
-> ([Maybe ByteString] -> [ByteString])
-> [Maybe ByteString]
-> [ByteString]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [Maybe ByteString] -> [ByteString]
forall a. [Maybe a] -> [a]
catMaybes ([Maybe ByteString] -> Maybe ByteString)
-> ParsecT [ByteString] () Identity [Maybe ByteString]
-> ParsecT [ByteString] () Identity (Maybe ByteString)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ParsecT [ByteString] () Identity (Maybe ByteString)
-> ParsecT [ByteString] () Identity ()
-> ParsecT [ByteString] () Identity [Maybe ByteString]
forall s (m :: * -> *) t u a end.
Stream s m t =>
ParsecT s u m a -> ParsecT s u m end -> ParsecT s u m [a]
manyTill ParsecT [ByteString] () Identity (Maybe ByteString)
classify ParsecT [ByteString] () Identity ()
forall s (m :: * -> *) t u.
(Stream s m t, Show t) =>
ParsecT s u m ()
eof
 where
  classify :: ParsecT [ByteString] () Identity (Maybe ByteString)
classify                   =  ByteString -> Maybe ByteString
forall a. a -> Maybe a
Just (ByteString -> Maybe ByteString)
-> ArgsParser ByteString
-> ParsecT [ByteString] () Identity (Maybe ByteString)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (ByteString -> Bool) -> ArgsParser ByteString
satisfy ByteString -> Bool
slashRun ParsecT [ByteString] () Identity (Maybe ByteString)
-> ParsecT [ByteString] () Identity (Maybe ByteString)
-> ParsecT [ByteString] () Identity (Maybe ByteString)
forall a.
ParsecT [ByteString] () Identity a
-> ParsecT [ByteString] () Identity a
-> ParsecT [ByteString] () Identity a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Maybe ByteString
forall a. Maybe a
Nothing Maybe ByteString
-> ArgsParser ByteString
-> ParsecT [ByteString] () Identity (Maybe ByteString)
forall a b.
a
-> ParsecT [ByteString] () Identity b
-> ParsecT [ByteString] () Identity a
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ ArgsParser ByteString
anyArg
  longestFirst :: [ByteString] -> [ByteString]
longestFirst               =  (ByteString -> ByteString -> Ordering)
-> [ByteString] -> [ByteString]
forall a. (a -> a -> Ordering) -> [a] -> [a]
sortBy ((ByteString -> Int) -> ByteString -> ByteString -> Ordering
forall a b. Ord a => (b -> a) -> b -> b -> Ordering
comparing (Int -> Int
forall a. Num a => a -> a
negate (Int -> Int) -> (ByteString -> Int) -> ByteString -> Int
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ByteString -> Int
Bytes.length))
  slashRun :: ByteString -> Bool
slashRun ByteString
s                 =  (Char -> Bool) -> ByteString -> Bool
Char8.all (Char -> Char -> Bool
forall a. Eq a => a -> a -> Bool
== Char
'/') ByteString
s Bool -> Bool -> Bool
&& ByteString -> Int
Bytes.length ByteString
s Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
> Int
1