summaryrefslogtreecommitdiff
path: root/testsuite/tests/typecheck/should_compile/T10564.hs
blob: 8ea7f5eb50ac00abe947cc87c369277892730d70 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
{-# LANGUAGE FlexibleInstances, FlexibleContexts, UndecidableInstances,
             DataKinds, TypeFamilies, KindSignatures, PolyKinds, FunctionalDependencies #-}
{-# OPTIONS_GHC -fno-warn-redundant-constraints #-}

module T10564 where

import Data.Kind (Type)

class HasFieldM (l :: k) r (v :: Maybe Type)
        | l r -> v

class HasFieldM1 (b :: Maybe [Type]) (l :: k) r v
        | b l r -> v

class HMemberM (e1 :: k) (l :: [k]) (r :: Maybe [k])
        | e1 l -> r

data Label a
type family LabelsOf (a :: [Type]) ::  [Type]

instance (HMemberM (Label (l::k)) (LabelsOf xs) b,
            HasFieldM1 b l (r xs) v)
         => HasFieldM l (r xs) v where