iri-0.5.1.1: library/Iri/Data/Instances/Lift.hs
{-# OPTIONS_GHC -Wno-orphans #-}
module Iri.Data.Instances.Lift where
import qualified Data.WideWord.Word128
import Iri.Data.Types
import Iri.Prelude
import Language.Haskell.TH.Lift
import Language.Haskell.TH.Syntax
import qualified Net.IPv6
fmap concat
$ traverse deriveLift
$ [ ''RegName,
''DomainLabel
]
instance Lift Host where
lift = \case
NamedHost regName ->
AppE (ConE 'NamedHost) <$> lift regName
IpV4Host ipV4 ->
AppE (ConE 'IpV4Host) <$> $(makeLift ''IPv4) ipV4
IpV6Host (Net.IPv6.IPv6 word128) -> do
word128Exp <- $(makeLift ''Data.WideWord.Word128.Word128) word128
pure (AppE (ConE 'IpV6Host) (AppE (ConE 'Net.IPv6.IPv6) word128Exp))
liftTyped =
Code . fmap TExp . lift
fmap concat
$ traverse deriveLift
$ [ ''Authority,
''Fragment,
''Hierarchy,
''HttpIri,
''Iri,
''Password,
''Path,
''PathSegment,
''Port,
''Query,
''Scheme,
''Security,
''User,
''UserInfo
]