1{-# language DataKinds #-}
2{-# language FlexibleContexts #-}
3{-# language FlexibleInstances #-}
4{-# language ScopedTypeVariables #-}
5{-# language StandaloneKindSignatures #-}
6{-# language TypeApplications #-}
7{-# language TypeFamilies #-}
8{-# language UndecidableInstances #-}
10module Rel8.Type.Semigroup
16import Data.Kind ( Constraint, Type )
17import Data.List.NonEmpty ( NonEmpty )
21import Data.ByteString ( ByteString )
22import qualified Data.ByteString.Lazy as Lazy ( ByteString )
25import Data.CaseInsensitive ( CI )
28import qualified Opaleye.Internal.HaskellDB.PrimQuery as Opaleye
31import {-# SOURCE #-} Rel8.Expr ( Expr )
32import Rel8.Expr.Opaleye ( zipPrimExprsWith )
33import Rel8.Schema.Nullability ( Sql )
34import Rel8.Type ( DBType )
37import Data.Text ( Text )
38import qualified Data.Text.Lazy as Lazy ( Text )
41import Data.Time.Clock ( DiffTime, NominalDiffTime )
44type DBSemigroup :: Type -> Constraint
45class DBType a => DBSemigroup a where
46 (<>.) :: Expr a -> Expr a -> Expr a
50instance Sql DBType a => DBSemigroup [a] where
51 (<>.) = zipPrimExprsWith (Opaleye.BinExpr (Opaleye.:||))
54instance Sql DBType a => DBSemigroup (NonEmpty a) where
55 (<>.) = zipPrimExprsWith (Opaleye.BinExpr (Opaleye.:||))
58instance DBSemigroup DiffTime where
59 (<>.) = zipPrimExprsWith (Opaleye.BinExpr (Opaleye.:+))
62instance DBSemigroup NominalDiffTime where
63 (<>.) = zipPrimExprsWith (Opaleye.BinExpr (Opaleye.:+))
66instance DBSemigroup Text where
67 (<>.) = zipPrimExprsWith (Opaleye.BinExpr (Opaleye.:||))
70instance DBSemigroup Lazy.Text where
71 (<>.) = zipPrimExprsWith (Opaleye.BinExpr (Opaleye.:||))
74instance DBSemigroup (CI Text) where
75 (<>.) = zipPrimExprsWith (Opaleye.BinExpr (Opaleye.:||))
78instance DBSemigroup (CI Lazy.Text) where
79 (<>.) = zipPrimExprsWith (Opaleye.BinExpr (Opaleye.:||))
82instance DBSemigroup ByteString where
83 (<>.) = zipPrimExprsWith (Opaleye.BinExpr (Opaleye.:||))
86instance DBSemigroup Lazy.ByteString where
87 (<>.) = zipPrimExprsWith (Opaleye.BinExpr (Opaleye.:||))
keysesc to close
- j k
- move down, up
- enter
- open
- esc
- back, or up a level
- 1 2 3 4
- readme, files, commits, refs
- /
- filter
- y
- copy the clone command
- c
- compare the chosen commit with another (or shift-click both)
- ?
- show or hide this list