{-# LANGUAGE AllowAmbiguousTypes #-}
{-# LANGUAGE ExistentialQuantification #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE MonoLocalBinds #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TypeApplications #-}

module CabalGild.Type.SomeParsecParser where

import qualified CabalGild.Type.List as List
import qualified CabalGild.Type.Set as Set
import qualified Distribution.Parsec as Parsec
import qualified Distribution.Pretty as Pretty

data SomeParsecParser
  = forall c s b a.
    (Parsec.Parsec (c s b a), Pretty.Pretty (c s b a)) =>
    SomeParsecParser (Parsec.ParsecParser (c s b a))

list ::
  forall s b a.
  (Parsec.Parsec (List.List s b a), Pretty.Pretty (List.List s b a)) =>
  SomeParsecParser
list :: forall s b a.
(Parsec (List s b a), Pretty (List s b a)) =>
SomeParsecParser
list = ParsecParser (List s b a) -> SomeParsecParser
forall (c :: * -> * -> * -> *) s b a.
(Parsec (c s b a), Pretty (c s b a)) =>
ParsecParser (c s b a) -> SomeParsecParser
SomeParsecParser (ParsecParser (List s b a) -> SomeParsecParser)
-> ParsecParser (List s b a) -> SomeParsecParser
forall a b. (a -> b) -> a -> b
$ forall a (m :: * -> *). (Parsec a, CabalParsing m) => m a
Parsec.parsec @(List.List s b a)

set ::
  forall s b a.
  (Parsec.Parsec (Set.Set s b a), Pretty.Pretty (Set.Set s b a)) =>
  SomeParsecParser
set :: forall s b a.
(Parsec (Set s b a), Pretty (Set s b a)) =>
SomeParsecParser
set = ParsecParser (Set s b a) -> SomeParsecParser
forall (c :: * -> * -> * -> *) s b a.
(Parsec (c s b a), Pretty (c s b a)) =>
ParsecParser (c s b a) -> SomeParsecParser
SomeParsecParser (ParsecParser (Set s b a) -> SomeParsecParser)
-> ParsecParser (Set s b a) -> SomeParsecParser
forall a b. (a -> b) -> a -> b
$ forall a (m :: * -> *). (Parsec a, CabalParsing m) => m a
Parsec.parsec @(Set.Set s b a)