recollections-0.1.1.0: test-kmettoverse/Aliased.hs
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE TypeFamilies #-}
{-# OPTIONS_GHC -ddump-splices #-}
module Aliased (checks) where
import Data.Recollections.TH
import GHC.Generics (Generically1(..))
import qualified Data.Distributive as D
import qualified Data.Functor.Rep as R
data Sides
= North
| South
| East
| West
deriving (Eq, Ord, Show, Enum, Bounded)
mkCollection ''Sides
mkIndices ''Sides
mkDistributiveFor ''D.Distributive ''Sides
mkRepresentableFor ''R.Representable ''Sides
checks :: [(String, Bool)]
checks =
[ ("aliased index . indices", all (\s -> R.index indices s == s) [minBound .. maxBound])
, ("aliased tabulate id", R.tabulate id == indices)
, ("aliased distribute", D.distribute (Just indices) == fmap Just indices)
]