[commit: ghc] master: Comments + tiny refactor of isNullarySrcDataCon (9c54185)
git at git.haskell.org
git at git.haskell.org
Thu Jul 21 08:54:26 UTC 2016
Repository : ssh://git@git.haskell.org/ghc
On branch : master
Link : http://ghc.haskell.org/trac/ghc/changeset/9c54185b26922d88e516942aad946f05f707d7ce/ghc
>---------------------------------------------------------------
commit 9c54185b26922d88e516942aad946f05f707d7ce
Author: Simon Peyton Jones <simonpj at microsoft.com>
Date: Wed Jul 20 15:28:37 2016 +0100
Comments + tiny refactor of isNullarySrcDataCon
>---------------------------------------------------------------
9c54185b26922d88e516942aad946f05f707d7ce
compiler/basicTypes/DataCon.hs | 18 ++++++++++++++----
1 file changed, 14 insertions(+), 4 deletions(-)
diff --git a/compiler/basicTypes/DataCon.hs b/compiler/basicTypes/DataCon.hs
index 2ab29aa..7fcc5fb 100644
--- a/compiler/basicTypes/DataCon.hs
+++ b/compiler/basicTypes/DataCon.hs
@@ -382,10 +382,10 @@ data DataCon
-- Constructor representation
dcRep :: DataConRep,
- -- Cached
- -- dcRepArity == length dataConRepArgTys
+ -- Cached; see Note [DataCon arities]
+ -- INVARIANT: dcRepArity == length dataConRepArgTys
+ -- INVARIANT: dcSourceArity == length dcOrigArgTys
dcRepArity :: Arity,
- -- dcSourceArity == length dcOrigArgTys
dcSourceArity :: Arity,
-- Result type of constructor is T t1..tn
@@ -427,6 +427,14 @@ Why do we need the TyVarBinders, rather than just the TyVars? So that
we can construct the right type for the DataCon with its foralls
attributed the correce visiblity. That in turn governs whether you
can use visible type application at a call of the data constructor.
+
+Note [DataCon arities]
+~~~~~~~~~~~~~~~~~~~~~~
+dcSourceArity does not take constraints into account,
+but dcRepArity does. For example:
+ MkT :: Ord a => a -> T a
+ dcSourceArity = 1
+ dcRepArity = 2
-}
data DataConRep
@@ -979,10 +987,12 @@ dataConRepArity :: DataCon -> Arity
dataConRepArity (MkData { dcRepArity = arity }) = arity
-- | Return whether there are any argument types for this 'DataCon's original source type
+-- See Note [DataCon arities]
isNullarySrcDataCon :: DataCon -> Bool
-isNullarySrcDataCon dc = null (dcOrigArgTys dc)
+isNullarySrcDataCon dc = dataConSourceArity dc == 0
-- | Return whether there are any argument types for this 'DataCon's runtime representation type
+-- See Note [DataCon arities]
isNullaryRepDataCon :: DataCon -> Bool
isNullaryRepDataCon dc = dataConRepArity dc == 0
More information about the ghc-commits
mailing list