packages feed

magic-tyfams 0.1.0.2 → 0.1.1.0

raw patch · 3 files changed

+78/−5 lines, 3 filesPVP ok

version bump matches the API change (PVP)

API changes (from Hackage documentation)

+ Plugin.MagicTyFam: type family WhenStuck (expr :: k) (b :: k) :: k

Files

ChangeLog.md view
@@ -1,15 +1,20 @@ # Changelog for type-sets +## 0.1.1.0 --- 2019-08-11++- Added `WhenStuck`, which plugins can use to offer error messages when the+    plugin isn't enabled.+ ## 0.1.0.2 --- 2019-08-06 -Fixed a bug in the cabal metadata+- Fixed a bug in the cabal metadata  ## 0.1.0.1 --- 2019-08-05 -Update documentation+- Update documentation  ## 0.1.0.0 --- 2019-08-05 -Initial release!+- Initial release!  ## Unreleased changes
magic-tyfams.cabal view
@@ -4,10 +4,10 @@ -- -- see: https://github.com/sol/hpack ----- hash: 2dfc658ae69265b2c9624dc6348cb97250e213c293af25c93fa9d71e85823b5b+-- hash: 4a58f9ee8308918934404095fd5f211da3a72a6cf10e2cee5015c87d4a448332  name:           magic-tyfams-version:        0.1.0.2+version:        0.1.1.0 synopsis:       Write plugins for magic type families with ease description:    Please see the README on GitHub at <https://github.com/isovector/type-sets/tree/master/magic-tyfams#readme> category:       Compiler Plugin
src/Plugin/MagicTyFam.hs view
@@ -1,6 +1,8 @@ {-# LANGUAGE BangPatterns  #-} {-# LANGUAGE LambdaCase    #-}+{-# LANGUAGE PolyKinds     #-} {-# LANGUAGE TupleSections #-}+{-# LANGUAGE TypeFamilies  #-} {-# OPTIONS_GHC -Wall      #-}  module Plugin.MagicTyFam@@ -14,6 +16,9 @@   , solveWanteds   , loadTyCon +    -- * Error messages+  , WhenStuck+     -- * Re-exports   , Plugin   , TyCon@@ -110,4 +115,67 @@   , _mtfrOriginal :: Type   , _mtfrSolved   :: Type   }+++------------------------------------------------------------------------------+-- | Type family for observing stuckness of a constraint. This can be used to+-- construct error messages helpfully pointing out that your plugin isn't+-- enabled. For example:+--+-- @+-- type family MyMagicFam a b c where+--   MyMagicFam a b c =+--     'WhenStuck' (MyMagicFamImpl a b c)+--               ('GHC.TypeLits.TypeError' (''GHC.TypeLits.Text' "The plugin isn't enabled!"))+--+-- type family MyMagicFam a b c where+-- @+--+-- and now solve @MyMagicFamImpl@ via 'magicTyFamPlugin'. The error message+-- will only appear when @MyMagicFamImpl@ is stuck, which is to say, if your+-- plugin isn't enabled.+type family WhenStuck (expr :: k) (b :: k) :: k where+  -- The type pattern @_ Foo@ is interpretered by the compiler as being of+  -- any kind. This is great and exactly what we want here, except that things+  -- like @forall s. Maybe s@ will get stuck on it.+  --+  -- So instead, we just propagate out 100 of these type variables and assume+  -- that 100 type variables ought to be enough for anyone.+  WhenStuck (_ AnythingOfAnyKind AnythingOfAnyKind AnythingOfAnyKind+               AnythingOfAnyKind AnythingOfAnyKind AnythingOfAnyKind+               AnythingOfAnyKind AnythingOfAnyKind AnythingOfAnyKind+               AnythingOfAnyKind AnythingOfAnyKind AnythingOfAnyKind+               AnythingOfAnyKind AnythingOfAnyKind AnythingOfAnyKind+               AnythingOfAnyKind AnythingOfAnyKind AnythingOfAnyKind+               AnythingOfAnyKind AnythingOfAnyKind AnythingOfAnyKind+               AnythingOfAnyKind AnythingOfAnyKind AnythingOfAnyKind+               AnythingOfAnyKind AnythingOfAnyKind AnythingOfAnyKind+               AnythingOfAnyKind AnythingOfAnyKind AnythingOfAnyKind+               AnythingOfAnyKind AnythingOfAnyKind AnythingOfAnyKind+               AnythingOfAnyKind AnythingOfAnyKind AnythingOfAnyKind+               AnythingOfAnyKind AnythingOfAnyKind AnythingOfAnyKind+               AnythingOfAnyKind AnythingOfAnyKind AnythingOfAnyKind+               AnythingOfAnyKind AnythingOfAnyKind AnythingOfAnyKind+               AnythingOfAnyKind AnythingOfAnyKind AnythingOfAnyKind+               AnythingOfAnyKind AnythingOfAnyKind AnythingOfAnyKind+               AnythingOfAnyKind AnythingOfAnyKind AnythingOfAnyKind+               AnythingOfAnyKind AnythingOfAnyKind AnythingOfAnyKind+               AnythingOfAnyKind AnythingOfAnyKind AnythingOfAnyKind+               AnythingOfAnyKind AnythingOfAnyKind AnythingOfAnyKind+               AnythingOfAnyKind AnythingOfAnyKind AnythingOfAnyKind+               AnythingOfAnyKind AnythingOfAnyKind AnythingOfAnyKind+               AnythingOfAnyKind AnythingOfAnyKind AnythingOfAnyKind+               AnythingOfAnyKind AnythingOfAnyKind AnythingOfAnyKind+               AnythingOfAnyKind AnythingOfAnyKind AnythingOfAnyKind+               AnythingOfAnyKind AnythingOfAnyKind AnythingOfAnyKind+               AnythingOfAnyKind AnythingOfAnyKind AnythingOfAnyKind+               AnythingOfAnyKind AnythingOfAnyKind AnythingOfAnyKind+               AnythingOfAnyKind AnythingOfAnyKind AnythingOfAnyKind+               AnythingOfAnyKind AnythingOfAnyKind AnythingOfAnyKind+               AnythingOfAnyKind AnythingOfAnyKind AnythingOfAnyKind+               AnythingOfAnyKind AnythingOfAnyKind AnythingOfAnyKind+               AnythingOfAnyKind) b = b+  WhenStuck a                     b = a++data AnythingOfAnyKind