groups-generic

Derive Group instances using generics (Haskell library)


Keywords
bsd3, library, math, Propose Tags , , Index, Quick Jump, Data.Group.Generics, groups-generic-0.3.1.0.tar.gz, browse, Package description, package maintainers, edit package information , 0.1.0.0, 0.2.0.0, 0.3.0.0
License
BSD-3-Clause
Install
cabal install groups-generic-0.3.1.0

Documentation

groups-generic

Extends the groups library with functionality for deriving Group instances using generics:

{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DerivingVia   #-}

module Example where

-- base
import Data.Semigroup
  ( Sum(..), Product(..) )
import GHC.Generics
  ( Generic )

-- generic-data
import Generic.Data
  ( GenericProduct(..) )

-- groups
import Data.Group
  ( Group(..) )

-- groups-generic
import Data.Group.Generics
  ( ) -- imports generic instances

-----------------------------------------------------

data Point2D a = Point2D !a !a
  deriving stock Generic
newtype Vector2D a = Vector2D { tip :: Point2D a }
  deriving ( Semigroup, Monoid, Group )
    via GenericProduct ( Point2D ( Sum a ) )

data MyRecord
  = MyRecord
  { field1 :: Sum Double
  , field2 :: Product Double
  , field3 :: ( Sum Int, Sum Int )
  }
  deriving stock Generic
  deriving ( Semigroup, Monoid, Group )
    via GenericProduct MyRecord