packages feed

argon-0.3.2.0: test/data/typefamilies.hs

{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE TypeOperators #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE DefaultSignatures #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE UndecidableInstances #-}
{-# LANGUAGE MultiParamTypeClasses #-}

import Control.Lens.Lens
import Data.Functor.Identity
import Data.Functor.Product
import Data.Proxy (Proxy (Proxy))
import GHC.Generics (Generic (..), (:*:) (..), K1 (..), M1 (..), U1 (..))
import Control.Applicative

type family GSize (f :: * -> *)
type instance GSize U1 = Z
type instance GSize (K1 i c) = S Z
type instance GSize (M1 i c f) = GSize f
type instance GSize (a :*: b) = Add (GSize a) (GSize b)