kinds 0.0.1.0 → 0.0.1.1
raw patch · 2 files changed
+15/−11 lines, 2 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
Files
- kinds.cabal +6/−3
- src/Data/Kind.hs +9/−8
kinds.cabal view
@@ -1,5 +1,5 @@ Name: kinds-Version: 0.0.1.0+Version: 0.0.1.1 Cabal-Version: >= 1.2.3 Build-Type: Simple License: BSD3@@ -10,7 +10,7 @@ Stability: provisional Homepage: http://community.haskell.org/~jeltsch/kinds/ Bug-Reports: jeltsch@tu-cottbus.de-Package-URL: http://hackage.haskell.org/packages/archive/kinds/0.0.0.0/kinds-0.0.0.0.tar.gz+Package-URL: http://hackage.haskell.org/packages/archive/kinds/0.0.1.1/kinds-0.0.1.1.tar.gz Synopsis: Emulation of subkinds and subkind polymorphism Description: Subkinds are the kind-level analog to subtypes. A kind denotes a set of types, and a subkind of some base kind denotes a subset of the base kind’s set of types.@@ -22,8 +22,11 @@ subkind and universally quantify over the inhabitants of the subkind. Since subkinds are represented by types, type-level polymorphism can be used to emulate kind-level polymorphism.+ .+ For detailed information, please refer to Section 6 of the paper+ /Generic Record Combinators with Static Type Checking/. Category: Type System-Tested-With: GHC == 6.10.4+Tested-With: GHC == 6.12.1 Library Build-Depends: base >= 3.0 && < 4.1
src/Data/Kind.hs view
@@ -8,9 +8,10 @@ subkind /K/ = /C_1/ => /t_1/ | ... | /C_n/ => /t_n/ @ - Thereby, /K/ would be a kind identifier, the /t_i/ would be types and the /C_i/ would be- contexts. This subkind declaration would introduce a subkind /K/ that covers all types that- match one of the /t_i/ and fulfill the corresponding context. For example, the declaration+ Thereby, @/K/@ would be a kind identifier, the @/t_i/@ would be types and the @/C_i/@ would+ be contexts. This subkind declaration would introduce a subkind @/K/@ that covers all types+ that match one of the @/t_i/@ and fulfill the corresponding context. For example, the+ declaration @ subkind Map = (Ord key) => Map key val | IntMap val@@ -39,9 +40,9 @@ closed item = All/K/ item ... item @ - Thereby, each /A_i/ stands for a whitespace-separated sequence of the free variables- of /t_i/. Finally, we add the following instance declaration for every /i/ between- /1/ and /n/:+ Thereby, each @/A_i/@ stands for a whitespace-separated sequence of the free variables+ of @/t_i/@. Finally, we add the following instance declaration for every @/i/@ between+ @1@ and @/n/@: @ instance /C_i/ => Inhabitant Kind/K/ /t_i/ where@@ -49,7 +50,7 @@ specialize (All/K/ _ ... _ item _ ... _) = item @ - Thereby, the number of wildcard patterns before and after @item@ is /i - 1/ and /n - i/,+ Thereby, the number of wildcard patterns before and after @item@ is @/i/ - 1@ and @/n/ - /i/@, respectively. The above subkind declaration for @Map@ can be emulated with the following code: @@@ -90,7 +91,7 @@ Universal quantification over the types of the subkind. For a subkind representation @Kind/K/@ of a subkind @/K/@ and a type @/f/@ of- kind @* -> *@, @All Kind/K/ /f/@ is isomorphic to @forall a :: /K/. /f/ a@.+ kind @* -> *@, @All Kind/K/ /f/@ is isomorphic to @forall val :: /K/. /f/ val@. -} data All kind :: (* -> *) -> *