module Unison.OrBuiltin ( OrBuiltin (..), builtin_, notBuiltin_, ) where import Control.Lens (Traversal) data OrBuiltin a b = Builtin a | NotBuiltin b deriving stock (OrBuiltin a b -> OrBuiltin a b -> Bool (OrBuiltin a b -> OrBuiltin a b -> Bool) -> (OrBuiltin a b -> OrBuiltin a b -> Bool) -> Eq (OrBuiltin a b) forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a forall a b. (Eq a, Eq b) => OrBuiltin a b -> OrBuiltin a b -> Bool $c== :: forall a b. (Eq a, Eq b) => OrBuiltin a b -> OrBuiltin a b -> Bool == :: OrBuiltin a b -> OrBuiltin a b -> Bool $c/= :: forall a b. (Eq a, Eq b) => OrBuiltin a b -> OrBuiltin a b -> Bool /= :: OrBuiltin a b -> OrBuiltin a b -> Bool Eq, Eq (OrBuiltin a b) Eq (OrBuiltin a b) => (OrBuiltin a b -> OrBuiltin a b -> Ordering) -> (OrBuiltin a b -> OrBuiltin a b -> Bool) -> (OrBuiltin a b -> OrBuiltin a b -> Bool) -> (OrBuiltin a b -> OrBuiltin a b -> Bool) -> (OrBuiltin a b -> OrBuiltin a b -> Bool) -> (OrBuiltin a b -> OrBuiltin a b -> OrBuiltin a b) -> (OrBuiltin a b -> OrBuiltin a b -> OrBuiltin a b) -> Ord (OrBuiltin a b) OrBuiltin a b -> OrBuiltin a b -> Bool OrBuiltin a b -> OrBuiltin a b -> Ordering OrBuiltin a b -> OrBuiltin a b -> OrBuiltin a b forall a. Eq a => (a -> a -> Ordering) -> (a -> a -> Bool) -> (a -> a -> Bool) -> (a -> a -> Bool) -> (a -> a -> Bool) -> (a -> a -> a) -> (a -> a -> a) -> Ord a forall a b. (Ord a, Ord b) => Eq (OrBuiltin a b) forall a b. (Ord a, Ord b) => OrBuiltin a b -> OrBuiltin a b -> Bool forall a b. (Ord a, Ord b) => OrBuiltin a b -> OrBuiltin a b -> Ordering forall a b. (Ord a, Ord b) => OrBuiltin a b -> OrBuiltin a b -> OrBuiltin a b $ccompare :: forall a b. (Ord a, Ord b) => OrBuiltin a b -> OrBuiltin a b -> Ordering compare :: OrBuiltin a b -> OrBuiltin a b -> Ordering $c< :: forall a b. (Ord a, Ord b) => OrBuiltin a b -> OrBuiltin a b -> Bool < :: OrBuiltin a b -> OrBuiltin a b -> Bool $c<= :: forall a b. (Ord a, Ord b) => OrBuiltin a b -> OrBuiltin a b -> Bool <= :: OrBuiltin a b -> OrBuiltin a b -> Bool $c> :: forall a b. (Ord a, Ord b) => OrBuiltin a b -> OrBuiltin a b -> Bool > :: OrBuiltin a b -> OrBuiltin a b -> Bool $c>= :: forall a b. (Ord a, Ord b) => OrBuiltin a b -> OrBuiltin a b -> Bool >= :: OrBuiltin a b -> OrBuiltin a b -> Bool $cmax :: forall a b. (Ord a, Ord b) => OrBuiltin a b -> OrBuiltin a b -> OrBuiltin a b max :: OrBuiltin a b -> OrBuiltin a b -> OrBuiltin a b $cmin :: forall a b. (Ord a, Ord b) => OrBuiltin a b -> OrBuiltin a b -> OrBuiltin a b min :: OrBuiltin a b -> OrBuiltin a b -> OrBuiltin a b Ord, Int -> OrBuiltin a b -> ShowS [OrBuiltin a b] -> ShowS OrBuiltin a b -> String (Int -> OrBuiltin a b -> ShowS) -> (OrBuiltin a b -> String) -> ([OrBuiltin a b] -> ShowS) -> Show (OrBuiltin a b) forall a. (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a forall a b. (Show a, Show b) => Int -> OrBuiltin a b -> ShowS forall a b. (Show a, Show b) => [OrBuiltin a b] -> ShowS forall a b. (Show a, Show b) => OrBuiltin a b -> String $cshowsPrec :: forall a b. (Show a, Show b) => Int -> OrBuiltin a b -> ShowS showsPrec :: Int -> OrBuiltin a b -> ShowS $cshow :: forall a b. (Show a, Show b) => OrBuiltin a b -> String show :: OrBuiltin a b -> String $cshowList :: forall a b. (Show a, Show b) => [OrBuiltin a b] -> ShowS showList :: [OrBuiltin a b] -> ShowS Show) builtin_ :: Traversal (OrBuiltin a b) (OrBuiltin a' b) a a' builtin_ :: forall a b a' (f :: * -> *). Applicative f => (a -> f a') -> OrBuiltin a b -> f (OrBuiltin a' b) builtin_ a -> f a' f = \case Builtin a x -> a' -> OrBuiltin a' b forall a b. a -> OrBuiltin a b Builtin (a' -> OrBuiltin a' b) -> f a' -> f (OrBuiltin a' b) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> a -> f a' f a x NotBuiltin b x -> OrBuiltin a' b -> f (OrBuiltin a' b) forall a. a -> f a forall (f :: * -> *) a. Applicative f => a -> f a pure (b -> OrBuiltin a' b forall a b. b -> OrBuiltin a b NotBuiltin b x) notBuiltin_ :: Traversal (OrBuiltin a b) (OrBuiltin a b') b b' notBuiltin_ :: forall a b b' (f :: * -> *). Applicative f => (b -> f b') -> OrBuiltin a b -> f (OrBuiltin a b') notBuiltin_ b -> f b' f = \case Builtin a x -> OrBuiltin a b' -> f (OrBuiltin a b') forall a. a -> f a forall (f :: * -> *) a. Applicative f => a -> f a pure (a -> OrBuiltin a b' forall a b. a -> OrBuiltin a b Builtin a x) NotBuiltin b x -> b' -> OrBuiltin a b' forall a b. b -> OrBuiltin a b NotBuiltin (b' -> OrBuiltin a b') -> f b' -> f (OrBuiltin a b') forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> b -> f b' f b x