packages feed

nestedtext-0.1.2: src/Data/NestedText/Encode.hs

{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE UndecidableInstances #-}

module Data.NestedText.Encode where

import Data.Bifunctor (first)
import qualified Data.Text.Lazy as TL
import Generic.Data

import Data.NestedText.To
import Data.NestedText.Serialize

data EncodeError a
  = EncodeError'ToItemError (ToItemError a)
  deriving (Generic)
instance Eq (ToItemError a) => Eq (EncodeError a) where
  (==) = geq
instance Show (ToItemError a) => Show (EncodeError a) where
  showsPrec = gshowsPrec

encode :: ToItem a => a -> Either (EncodeError a) TL.Text
encode = fmap (serialize 2) . first EncodeError'ToItemError . toItem