packages feed

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)
  ]