packages feed

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))))