module Unison.Merge.ThreeWay ( ThreeWay (..), forgetLca, toTwoOrThreeWay, toUpdated, GThreeWay (..), gforgetLca, gfromTwoWay, gtoThreeWay, gtoUpdated, ) where import Unison.Merge.Internal.Types (GThreeWay (..), ThreeWay (..)) import Unison.Merge.TwoOrThreeWay (TwoOrThreeWay (..)) import Unison.Merge.TwoWay (TwoWay (..)) import Unison.Merge.Updated (GUpdated (..), Updated) forgetLca :: ThreeWay a -> TwoWay a forgetLca :: forall a. ThreeWay a -> TwoWay a forgetLca ThreeWay {a alice :: a alice :: forall a. ThreeWay a -> a alice, a bob :: a bob :: forall a. ThreeWay a -> a bob} = TwoWay {a alice :: a alice :: a alice, a bob :: a bob :: a bob} toTwoOrThreeWay :: ThreeWay a -> TwoOrThreeWay a toTwoOrThreeWay :: forall a. ThreeWay a -> TwoOrThreeWay a toTwoOrThreeWay ThreeWay {a alice :: forall a. ThreeWay a -> a alice :: a alice, a bob :: forall a. ThreeWay a -> a bob :: a bob, a lca :: a lca :: forall a. ThreeWay a -> a lca} = TwoOrThreeWay {a alice :: a alice :: a alice, a bob :: a bob :: a bob, lca :: Maybe a lca = a -> Maybe a forall a. a -> Maybe a Just a lca} toUpdated :: ThreeWay a -> TwoWay (Updated a) toUpdated :: forall a. ThreeWay a -> TwoWay (Updated a) toUpdated = GThreeWay a a -> TwoWay (GUpdated a a) forall a b. GThreeWay a b -> TwoWay (GUpdated a b) gtoUpdated (GThreeWay a a -> TwoWay (GUpdated a a)) -> (ThreeWay a -> GThreeWay a a) -> ThreeWay a -> TwoWay (GUpdated a a) forall b c a. (b -> c) -> (a -> b) -> a -> c . ThreeWay a -> GThreeWay a a forall a. ThreeWay a -> GThreeWay a a toG toG :: ThreeWay a -> GThreeWay a a toG :: forall a. ThreeWay a -> GThreeWay a a toG ThreeWay {a lca :: forall a. ThreeWay a -> a lca :: a lca, a alice :: forall a. ThreeWay a -> a alice :: a alice, a bob :: forall a. ThreeWay a -> a bob :: a bob} = GThreeWay {a lca :: a lca :: a lca, a alice :: a alice :: a alice, a bob :: a bob :: a bob} gforgetLca :: GThreeWay a b -> TwoWay b gforgetLca :: forall a b. GThreeWay a b -> TwoWay b gforgetLca GThreeWay {b alice :: forall a b. GThreeWay a b -> b alice :: b alice, b bob :: forall a b. GThreeWay a b -> b bob :: b bob} = TwoWay {b alice :: b alice :: b alice, b bob :: b bob :: b bob} gfromTwoWay :: a -> TwoWay b -> GThreeWay a b gfromTwoWay :: forall a b. a -> TwoWay b -> GThreeWay a b gfromTwoWay a lca TwoWay {b alice :: forall a. TwoWay a -> a alice :: b alice, b bob :: forall a. TwoWay a -> a bob :: b bob} = GThreeWay {a lca :: a lca :: a lca, b alice :: b alice :: b alice, b bob :: b bob :: b bob} gtoThreeWay :: GThreeWay a a -> ThreeWay a gtoThreeWay :: forall a. GThreeWay a a -> ThreeWay a gtoThreeWay GThreeWay {a lca :: forall a b. GThreeWay a b -> a lca :: a lca, a alice :: forall a b. GThreeWay a b -> b alice :: a alice, a bob :: forall a b. GThreeWay a b -> b bob :: a bob} = ThreeWay {a lca :: a lca :: a lca, a alice :: a alice :: a alice, a bob :: a bob :: a bob} gtoUpdated :: GThreeWay a b -> TwoWay (GUpdated a b) gtoUpdated :: forall a b. GThreeWay a b -> TwoWay (GUpdated a b) gtoUpdated GThreeWay {a lca :: forall a b. GThreeWay a b -> a lca :: a lca, b alice :: forall a b. GThreeWay a b -> b alice :: b alice, b bob :: forall a b. GThreeWay a b -> b bob :: b bob} = TwoWay { alice :: GUpdated a b alice = Updated {old :: a old = a lca, new :: b new = b alice}, bob :: GUpdated a b bob = Updated {old :: a old = a lca, new :: b new = b bob} }