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 +8/−3
- magic-tyfams.cabal +2/−2
- src/Plugin/MagicTyFam.hs +68/−0
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