packages feed

lazy-async-1.0.0.0: test/Test/Optics.hs

module Test.Optics (focus, _Incomplete, _Failure, _Success, _Done) where

import Control.Monad     (Monad (return))
import Data.Function     ((.))
import Data.Maybe        (maybe)
import Hedgehog          (MonadTest, failure)
import LazyAsync         (Outcome, Status)
import Optics.AffineFold (An_AffineFold, preview)
import Optics.Optic      (Is, Optic')
import Optics.TH         (makePrisms)

$(makePrisms ''Status)
$(makePrisms ''Outcome)

focus :: (MonadTest m, Is k An_AffineFold) => Optic' k is s a -> s -> m a
focus o = maybe failure return . preview o