hpython-0.1: src/Language/Python/Optics/Validated.hs
{-# language DataKinds, PolyKinds, DefaultSignatures #-}
{-|
Module : Language.Python.Optics.Validated
Copyright : (C) CSIRO 2017-2018
License : BSD3
Maintainer : Isaac Elliott <isaace71295@gmail.com>
Stability : experimental
Portability : non-portable
-}
module Language.Python.Optics.Validated (
Validated (unvalidated)
) where
import Control.Lens.Getter (Getter, to)
import Data.Coerce (Coercible, coerce)
-- | A type class for things for which we can strip the validation information.
-- This can help types line up when they need to, for example to put many
-- things of various validation statuses together in a list.
class Validated (s :: [*] -> * -> *) where
unvalidated :: Getter (s v a) (s '[] a)
default unvalidated :: Coercible (s v a) (s '[] a) => Getter (s v a) (s '[] a)
unvalidated = to coerce