overloaded-0.3: test/Overloaded/Test/CodeLabels/String.hs
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE GADTs #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TemplateHaskellQuotes #-}
module Overloaded.Test.CodeLabels.String where
import Data.Char (toUpper)
import Data.Proxy (Proxy (..))
import GHC.TypeLits (KnownSymbol, symbolVal)
import Language.Haskell.TH.Syntax (lift)
import Language.Haskell.TH.Syntax.Compat (unsafeSpliceCoerce)
import Overloaded
instance (a ~ Char, KnownSymbol sym) => IsCodeLabel sym [a] where
codeFromLabel = unsafeSpliceCoerce (lift (map toUpper (symbolVal (Proxy :: Proxy sym))))