{-# LANGUAGE DataKinds #-} {-# LANGUAGE DefaultSignatures #-} {-# LANGUAGE ExistentialQuantification #-} {-# LANGUAGE PolyKinds #-} {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE TemplateHaskell #-} {-# LANGUAGE TypeFamilies #-} {-# LANGUAGE UndecidableInstances #-} module T176 where import Data.Kind (Type) import Data.Singletons.Prelude import Data.Singletons.TH $(singletons [d| class Foo1 a where bar1 :: a -> (a -> b) -> b baz1 :: a quux1 :: Foo1 a => a -> a quux1 x = x `bar1` \_ -> baz1 class Foo2 a where bar2 :: a -> b -> b baz2 :: a quux2 :: Foo2 a => a -> a quux2 x = x `bar2` baz2 |])