{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE PatternSynonyms #-}
{-# LANGUAGE ViewPatterns #-}
module Data.Dynamic.Lens
( AsDynamic(..)
, pattern Data.Dynamic.Lens.Dynamic
) where
import Control.Exception
import Control.Exception.Lens
import Control.Lens
import Data.Dynamic
class AsDynamic t where
_Dynamic :: Typeable a => Prism' t a
instance AsDynamic Dynamic where
_Dynamic :: Prism' Dynamic a
_Dynamic = (a -> Dynamic) -> (Dynamic -> Maybe a) -> Prism' Dynamic a
forall b s a. (b -> s) -> (s -> Maybe a) -> Prism s s a b
prism' a -> Dynamic
forall a. Typeable a => a -> Dynamic
toDyn Dynamic -> Maybe a
forall a. Typeable a => Dynamic -> Maybe a
fromDynamic
{-# INLINE _Dynamic #-}
instance AsDynamic SomeException where
_Dynamic :: Prism' SomeException a
_Dynamic = p Dynamic (f Dynamic) -> p SomeException (f SomeException)
forall a. Exception a => Prism' SomeException a
exception(p Dynamic (f Dynamic) -> p SomeException (f SomeException))
-> (p a (f a) -> p Dynamic (f Dynamic))
-> p a (f a)
-> p SomeException (f SomeException)
forall b c a. (b -> c) -> (a -> b) -> a -> c
.(a -> Dynamic) -> (Dynamic -> Maybe a) -> Prism Dynamic Dynamic a a
forall b s a. (b -> s) -> (s -> Maybe a) -> Prism s s a b
prism' a -> Dynamic
forall a. Typeable a => a -> Dynamic
toDyn Dynamic -> Maybe a
forall a. Typeable a => Dynamic -> Maybe a
fromDynamic
{-# INLINE _Dynamic #-}
pattern Dynamic :: (AsDynamic s, Typeable a) => a -> s
pattern $bDynamic :: a -> s
$mDynamic :: forall r s a.
(AsDynamic s, Typeable a) =>
s -> (a -> r) -> (Void# -> r) -> r
Dynamic a <- (preview _Dynamic -> Just a) where
Dynamic a
a = AReview s a -> a -> s
forall b (m :: * -> *) t. MonadReader b m => AReview t b -> m t
review AReview s a
forall t a. (AsDynamic t, Typeable a) => Prism' t a
_Dynamic a
a