diff options
author | Daniel Gröber <dxld@darkboxed.org> | 2019-03-31 00:17:36 +0100 |
---|---|---|
committer | Daniel Gröber <dxld@darkboxed.org> | 2019-03-31 00:18:58 +0100 |
commit | 19c77b1b65d580cd978b5c1c572445f24efe171a (patch) | |
tree | 530af21c7a962dc6ce4ec66094b90c6ddea41843 /src | |
parent | a612a11140d93bdaa416f16e2c77a23332e9d656 (diff) |
Promote 'Ex' to exported API
We will need it for the project discovery module later.
Diffstat (limited to 'src')
-rw-r--r-- | src/CabalHelper/Compiletime/Types.hs | 30 |
1 files changed, 29 insertions, 1 deletions
diff --git a/src/CabalHelper/Compiletime/Types.hs b/src/CabalHelper/Compiletime/Types.hs index 6b7d74a..9911aec 100644 --- a/src/CabalHelper/Compiletime/Types.hs +++ b/src/CabalHelper/Compiletime/Types.hs @@ -15,7 +15,7 @@ -- along with this program. If not, see <http://www.gnu.org/licenses/>. {-# LANGUAGE DeriveGeneric, DeriveDataTypeable, DefaultSignatures, - StandaloneDeriving, GADTs, DataKinds, KindSignatures, RankNTypes #-} + StandaloneDeriving, GADTs, DataKinds, KindSignatures, RankNTypes, PolyKinds #-} {-| Module : CabalHelper.Compiletime.Types @@ -105,6 +105,34 @@ data DistDir (pt :: ProjType) where deriving instance Show (DistDir pt) +-- | General purpose existential wrapper. Useful for hiding a phantom type +-- argument. +-- +-- Say you have: +-- +-- @ +-- {-# LANGUAGE DataKinds, GADTS #-} +-- data K = A | B | ... +-- data Q k where +-- QA :: ... -> Q 'A +-- QB :: ... -> Q 'B +-- @ +-- +-- and you want a list of @Q@. You can use @Ex@ to hide the phantom type +-- argument and recover it later by matching on the GADT constructors: +-- +-- @ +-- qa :: Q A +-- qa = QA +-- +-- qb :: Q B +-- qb = QB +-- +-- mylist :: [Ex Q] +-- mylist = [Ex qa, Ex qb] +-- @ +data Ex a = forall x. Ex (a x) + -- | Environment for running a 'Query'. The constructor is not exposed in the -- API to allow extending it with more fields without breaking user code. -- |