{-# LANGUAGE DataKinds #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE UndecidableInstances #-}
{-# LANGUAGE FunctionalDependencies #-}
import Data.Proxy
type family (F a) :: Bool where
F Char = 'True
F a = 'False
class ShowList a b | a->b
instance (F a ~ 'True) => ShowList a String
instance ShowList Integer Integer
main = putStrLn "Hello World!"