{-# LANGUAGE
DataKinds
, FlexibleContexts
, FlexibleInstances
, TypeOperators
#-}
module Test.Common where
import Data.Functor.Contravariant
import Data.List
import Data.Text.Lazy.Builder
import Data.Vinyl
import Data.Vinyl.Functor
import Data.Vinyl.Utils.Operator
type Id = Identity
buildDelimited
:: Buildable rs
=> Char
-> Rec Id rs
-> Builder
buildDelimited delim =
mconcat
. intersperse (singleton delim)
. build
build
:: Buildable rs
=> Rec Id rs
-> [Builder]
build r =
map getIdentity
. recordToList
$ builder \$\ r
class Buildable rs where
builder :: Rec (Op Builder) rs
instance Buildable '[] where
builder = RNil
instance (Buildable rs, Show r) => Buildable (r ': rs) where
builder = Op (fromString . show) :& builder