{-# LANGUAGE DataKinds #-} {-# LANGUAGE DefaultSignatures #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE KindSignatures #-} {-# LANGUAGE MonoLocalBinds #-} {-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE TemplateHaskell #-} {-# LANGUAGE UnicodeSyntax #-} module Data.Class.Closed.Example ( -- Explicit export is required or else the private field will be exported. Example₁ (example₁), Example₂ (example₂) ) where import Data.Class.Closed.TH (close) import Data.Proxy (Proxy (..)) close [d| class Example₁ a where example₁ ∷ a instance Example₁ () where example₁ = () class Example₂ a b where example₂ ∷ a → Proxy (b ∷ Bool) instance Example₂ a 'True where example₂ _ = Proxy |] -- The following does not work unless it is moved inside the quotation. -- instance Example₁ Int where -- example₁ = 0