numbered-semigroups 0.1.0.0 → 0.1.1.0
raw patch · 2 files changed
+23/−17 lines, 2 filesdep +taggeddep +voiddep ~basedep ~call-stackdep ~semigroupsPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
Dependencies added: tagged, void
Dependency ranges changed: base, call-stack, semigroups
API changes (from Hackage documentation)
- Data.Semigroup.Numbered: instance Data.Semigroup.Numbered.SemigroupNo 0 [Data.Void.Void]
- Data.Semigroup.Numbered: instance Data.Semigroup.Numbered.SemigroupNo 0 [GHC.Base.Maybe a]
- Data.Semigroup.Numbered: instance Data.Semigroup.Numbered.SemigroupNo 0 [GHC.Integer.Type.Integer]
- Data.Semigroup.Numbered: instance Data.Semigroup.Numbered.SemigroupNo 1 [[Data.Void.Void]]
- Data.Semigroup.Numbered: instance Data.Semigroup.Numbered.SemigroupNo 1 [[GHC.Base.Maybe a]]
- Data.Semigroup.Numbered: instance Data.Semigroup.Numbered.SemigroupNo 1 [[GHC.Integer.Type.Integer]]
- Data.Semigroup.Numbered: instance Data.Semigroup.Numbered.SemigroupNo n Data.Void.Void
- Data.Semigroup.Numbered: instance Data.Semigroup.Numbered.SemigroupNo n g => Data.Semigroup.Numbered.SemigroupNo n (GHC.Base.Maybe g)
+ Data.Semigroup.Numbered: infixl 6 ===
+ Data.Semigroup.Numbered: infixr 1 ██
+ Data.Semigroup.Numbered: infixr 2 ━━
+ Data.Semigroup.Numbered: infixr 3 ┃
+ Data.Semigroup.Numbered: infixr 4 ■
+ Data.Semigroup.Numbered: infixr 5 ──
+ Data.Semigroup.Numbered: infixr 6 │
+ Data.Semigroup.Numbered: instance Data.Semigroup.Numbered.SemigroupNo 0 [GHC.Base.Void]
+ Data.Semigroup.Numbered: instance Data.Semigroup.Numbered.SemigroupNo 0 [GHC.Maybe.Maybe a]
+ Data.Semigroup.Numbered: instance Data.Semigroup.Numbered.SemigroupNo 0 [GHC.Num.Integer.Integer]
+ Data.Semigroup.Numbered: instance Data.Semigroup.Numbered.SemigroupNo 1 [[GHC.Base.Void]]
+ Data.Semigroup.Numbered: instance Data.Semigroup.Numbered.SemigroupNo 1 [[GHC.Maybe.Maybe a]]
+ Data.Semigroup.Numbered: instance Data.Semigroup.Numbered.SemigroupNo 1 [[GHC.Num.Integer.Integer]]
+ Data.Semigroup.Numbered: instance Data.Semigroup.Numbered.SemigroupNo n GHC.Base.Void
+ Data.Semigroup.Numbered: instance Data.Semigroup.Numbered.SemigroupNo n g => Data.Semigroup.Numbered.SemigroupNo n (GHC.Maybe.Maybe g)
- Data.Semigroup.Numbered: class SemigroupNo (n :: Nat) g where sappendN p x y = sconcatN p $ x :| [y] sconcatN = foldr1 . sappendN stimesN p y₀ x₀ | y₀ <= 0 = error "stimesN: positive multiplier expected" | otherwise = f x₀ y₀ where f x y | even y = f (x <> x) (y `quot` 2) | y == 1 = x | otherwise = g (x <> x) (pred y `quot` 2) x g x y z | even y = g (x <> x) (y `quot` 2) z | y == 1 = x <> z | otherwise = g (x <> x) (pred y `quot` 2) (x <> z) (<>) = sappendN p
+ Data.Semigroup.Numbered: class SemigroupNo (n :: Nat) g
Files
- Data/Semigroup/Numbered.hs +16/−12
- numbered-semigroups.cabal +7/−5
Data/Semigroup/Numbered.hs view
@@ -3,7 +3,7 @@ -- Copyright : (c) Justus Sagemüller 2017 -- License : LGPL v3 -- --- Maintainer : (@) jsagemue $ uni-koeln.de+-- Maintainer : (@) justussa $ kth.se -- Stability : experimental -- Portability : portable -- @@ -25,19 +25,23 @@ import GHC.TypeLits import qualified Data.List.NonEmpty as NE-import Data.Foldable+import qualified Data.Foldable as Foldable import Data.Proxy import Data.Void +import Control.Applicative+ import Data.CallStack (HasCallStack) class SemigroupNo (n :: Nat) g where+ {-# MINIMAL sappendN | sconcatN #-}+ sappendN :: proxy n -> g -> g -> g sappendN p x y = sconcatN p $ x NE.:|[y] sconcatN :: proxy n -> NE.NonEmpty g -> g- sconcatN = foldr1 . sappendN+ sconcatN = Foldable.foldr1 . sappendN stimesN :: (Integral b, HasCallStack) => proxy n -> b -> g -> g -- Adapted from@@ -58,7 +62,7 @@ instance (SemigroupNo n g) => SemigroupNo n (a -> g) where sappendN p f g x = sappendN p (f x) (g x)- sconcatN p fs x = sconcatN p $ ($x)<$>fs+ sconcatN p fs x = sconcatN p $ ($ x)<$>fs stimesN p n f = stimesN p n . f instance (SemigroupNo n g) => SemigroupNo n (Maybe g) where@@ -97,14 +101,14 @@ sappendN p (x:xs) (y:ys) = sappendN p x y : sappendN p xs ys instance SemigroupNo 1 [[Void]] where sappendN _ = (++)-instance SemigroupNo 1 [[()]] where sconcatN _ = paddedLines () . concat-instance SemigroupNo 1 [[Char]] where sconcatN _ = paddedLines ' ' . concat-instance SemigroupNo 1 [[Int]] where sconcatN _ = paddedLines 0 . concat-instance SemigroupNo 1 [[Integer]] where sconcatN _ = paddedLines 0 . concat-instance SemigroupNo 1 [[Float]] where sconcatN _ = paddedLines 0 . concat-instance SemigroupNo 1 [[Double]] where sconcatN _ = paddedLines 0 . concat-instance SemigroupNo 1 [[Rational]] where sconcatN _ = paddedLines 0 . concat-instance SemigroupNo 1 [[Maybe a]] where sconcatN _ = paddedLines Nothing . concat+instance SemigroupNo 1 [[()]] where sconcatN _ = paddedLines () . Foldable.concat+instance SemigroupNo 1 [[Char]] where sconcatN _ = paddedLines ' ' . Foldable.concat+instance SemigroupNo 1 [[Int]] where sconcatN _ = paddedLines 0 . Foldable.concat+instance SemigroupNo 1 [[Integer]] where sconcatN _ = paddedLines 0 . Foldable.concat+instance SemigroupNo 1 [[Float]] where sconcatN _ = paddedLines 0 . Foldable.concat+instance SemigroupNo 1 [[Double]] where sconcatN _ = paddedLines 0 . Foldable.concat+instance SemigroupNo 1 [[Rational]] where sconcatN _ = paddedLines 0 . Foldable.concat+instance SemigroupNo 1 [[Maybe a]] where sconcatN _ = paddedLines Nothing . Foldable.concat instance (SemigroupNo 1 [[a]]) => SemigroupNo 1 [[[a]]] where sappendN _ [] ys = ys sappendN _ xs [] = xs
numbered-semigroups.cabal view
@@ -2,7 +2,7 @@ -- documentation, see http://haskell.org/cabal/users-guide/ name: numbered-semigroups-version: 0.1.0.0+version: 0.1.1.0 synopsis: A sequence of semigroups, for composing stuff in multiple spatial directions. description: Some types are composable in multiple “directions”, either in a literal sense (<http://hackage.haskell.org/package/diagrams diagrams>@@ -16,7 +16,7 @@ license: LGPL-3 license-file: LICENSE author: Justus Sagemüller-maintainer: (@) jsagemue $ uni-koeln.de+maintainer: (@) justussa $ kth.se -- copyright: category: Data build-type: Simple@@ -27,8 +27,10 @@ exposed-modules: Data.Semigroup.Numbered -- other-modules: -- other-extensions: - build-depends: base >=4.8 && <4.11- , semigroups- , call-stack+ build-depends: base >=4.6 && <4.21+ , semigroups <0.21+ , void <0.8+ , tagged <0.9+ , call-stack <0.5 -- hs-source-dirs: default-language: Haskell2010