rakuten-0.1.0.1: test/Rakuten/Test/Class.hs
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE TypeSynonymInstances #-}
module Rakuten.Test.Class
( TestData(..)
) where
import Data.Extensible
import Data.Functor.Identity (Identity (..))
import Data.Proxy
import Data.Text (Text)
import GHC.TypeLits (KnownSymbol)
class TestData a where
testData :: a
instance TestData Int where
testData = 12345
instance TestData Double where
testData = 123.456
instance TestData Text where
testData = "abcdefg"
instance TestData Bool where
testData = False
instance (Applicative m, TestData a) => TestData (m a) where
testData = pure testData
instance Forall (KeyValue KnownSymbol TestData) xs => TestData (Record xs) where
testData = runIdentity $ hgenerateFor
(Proxy :: Proxy (KeyValue KnownSymbol TestData)) (const $ pure (Field testData))