Copyright | (C) 2018 chessai |
---|---|
License | MIT (see the file LICENSE) |
Maintainer | chessai <chessai1996@gmail.com> |
Stability | provisional |
Portability | portable |
Safe Haskell | None |
Language | Haskell98 |
Data.Semiring.Generic
Description
This module provides generic deriving tools for semirings and rings for product-like structures.
Synopsis
- class GSemiring (f :: Type -> Type) where
- gzero :: (Generic a, GSemiring (Rep a)) => a
- gone :: (Generic a, GSemiring (Rep a)) => a
- gplus :: (Generic a, GSemiring (Rep a)) => a -> a -> a
- gtimes :: (Generic a, GSemiring (Rep a)) => a -> a -> a
- gfromNatural :: (Generic a, GSemiring (Rep a)) => Natural -> a
- class GRing (f :: Type -> Type) where
- gnegate' :: f a -> f a
- gnegate :: (Generic a, GRing (Rep a)) => a -> a
- newtype GenericSemiring a = GenericSemiring a
Documentation
class GSemiring (f :: Type -> Type) where #
Generic Semiring
class, used to implement plus
, times
, zero
,
and one
for product-like types implementing Generic
.
gfromNatural :: (Generic a, GSemiring (Rep a)) => Natural -> a #
Generically generate a Semiring
fromNatural
for any product-like type
implementing Generic
.
It is only defined for product types.
newtype GenericSemiring a #
An Identity-style wrapper with a Generic
interface
to be used with '-XDerivingVia'.
Constructors
GenericSemiring a |
Instances
(Generic a, GSemiring (Rep a)) => Semiring (GenericSemiring a) # | |
Defined in Data.Semiring.Generic Methods plus :: GenericSemiring a -> GenericSemiring a -> GenericSemiring a # zero :: GenericSemiring a # times :: GenericSemiring a -> GenericSemiring a -> GenericSemiring a # one :: GenericSemiring a # fromNatural :: Natural -> GenericSemiring a # |