packages feed

prairie-0.1.2.0: test/Prairie/TypeFamilySpec.hs

{-# LANGUAGE ConstraintKinds #-}
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE DuplicateRecordFields #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE GADTs #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE TypeApplications #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE TypeOperators #-}
{-# LANGUAGE UndecidableInstances #-}

module Prairie.TypeFamilySpec where

import Prairie

data Mode = Foo | Bar

type family Family (m :: Mode) a where
    Family 'Foo a = a
    Family 'Bar a = ()

data Test (m :: Mode) = Test
    { test_field1 :: Family m Int
    , test_field2 :: Family m Bool
    }

mkRecordWith defaultPrairieOptions{useTypeEquality = True} ''Test