{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE PolyKinds #-}
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE TypeOperators #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE UndecidableInstances #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE TypeApplications #-}
{-# LANGUAGE AllowAmbiguousTypes #-}
module Data.TypedEncoding.Common.Class (
module Data.TypedEncoding.Common.Class
, module Data.TypedEncoding.Common.Class.Common
, module Data.TypedEncoding.Common.Class.Encode
, module Data.TypedEncoding.Common.Class.Decode
, module Data.TypedEncoding.Common.Class.Validate
, module Data.TypedEncoding.Common.Class.Superset
) where
import Data.TypedEncoding.Common.Class.Common
import Data.TypedEncoding.Common.Class.Encode
import Data.TypedEncoding.Common.Class.Decode
import Data.TypedEncoding.Common.Class.Validate
import Data.TypedEncoding.Common.Class.Superset
import Data.TypedEncoding.Common.Types (Enc(..) )
import Data.TypedEncoding.Combinators.Unsafe (withUnsafeCoerce)
import GHC.TypeLits
class (KnownSymbol nm, KnownSymbol ann) => ToEncString f nm ann a str where
toEncF :: a -> f (Enc '[nm] () str)
class (KnownSymbol nm, KnownSymbol ann) => FromEncString f nm ann a str where
fromEncF :: Enc '[nm] () str -> f a
class FlattenAs (y :: Symbol) (x :: Symbol) where
flattenAs :: Enc (x ': xs) c str -> Enc '[y] c str
flattenAs = (str -> str)
-> Enc @[Symbol] ((':) @Symbol x xs) c str
-> Enc @[Symbol] ((':) @Symbol y ('[] @Symbol)) c str
forall k1 k2 s1 s2 (e1 :: k1) c (e2 :: k2).
(s1 -> s2) -> Enc @k1 e1 c s1 -> Enc @k2 e2 c s2
withUnsafeCoerce str -> str
forall a. a -> a
id