module Unison.Merge.ThreeWay
  ( ThreeWay (..),
    forgetLca,
    toTwoOrThreeWay,
  )
where

import Unison.Merge.Internal.Types (ThreeWay (..))
import Unison.Merge.TwoOrThreeWay (TwoOrThreeWay (..))
import Unison.Merge.TwoWay (TwoWay (..))

forgetLca :: ThreeWay a -> TwoWay a
forgetLca :: forall a. ThreeWay a -> TwoWay a
forgetLca ThreeWay {a
alice :: a
$sel:alice:ThreeWay :: forall a. ThreeWay a -> a
alice, a
bob :: a
$sel:bob:ThreeWay :: forall a. ThreeWay a -> a
bob} =
  TwoWay {a
alice :: a
$sel:alice:TwoWay :: a
alice, a
bob :: a
$sel:bob:TwoWay :: a
bob}

toTwoOrThreeWay :: ThreeWay a -> TwoOrThreeWay a
toTwoOrThreeWay :: forall a. ThreeWay a -> TwoOrThreeWay a
toTwoOrThreeWay ThreeWay {a
$sel:alice:ThreeWay :: forall a. ThreeWay a -> a
alice :: a
alice, a
$sel:bob:ThreeWay :: forall a. ThreeWay a -> a
bob :: a
bob, a
lca :: a
$sel:lca:ThreeWay :: forall a. ThreeWay a -> a
lca} =
  TwoOrThreeWay {a
alice :: a
$sel:alice:TwoOrThreeWay :: a
alice, a
bob :: a
$sel:bob:TwoOrThreeWay :: a
bob, $sel:lca:TwoOrThreeWay :: Maybe a
lca = a -> Maybe a
forall a. a -> Maybe a
Just a
lca}