packages feed

effectful-zoo-0.0.3.0: components/core/Effectful/Zoo/Aeson.hs

module Effectful.Zoo.Aeson
  ( aesonDecode,
  ) where

import Data.Aeson (FromJSON)
import Data.Aeson qualified as Aeson
import Data.ByteString.Lazy qualified as LBS
import Effectful
import Effectful.Zoo.Core
import Effectful.Zoo.Error.Static
import HaskellWorks.Error.Types.JsonDecodeError
import HaskellWorks.Prelude

aesonDecode :: forall a r. ()
  => r <: Error JsonDecodeError
  => FromJSON a
  => LBS.ByteString
  -> Eff r a
aesonDecode bs =
  fromEither (Aeson.eitherDecode bs)
    & mapError newJsonDecodeError