module Unison.Merge.TwoOrThreeWay
  ( TwoOrThreeWay (..),
    forgetLca,
    toThreeWay,
  )
where

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

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

toThreeWay :: a -> TwoOrThreeWay a -> ThreeWay a
toThreeWay :: forall a. a -> TwoOrThreeWay a -> ThreeWay a
toThreeWay a
x TwoOrThreeWay {a
$sel:alice:TwoOrThreeWay :: forall a. TwoOrThreeWay a -> a
alice :: a
alice, a
$sel:bob:TwoOrThreeWay :: forall a. TwoOrThreeWay a -> a
bob :: a
bob, Maybe a
lca :: Maybe a
$sel:lca:TwoOrThreeWay :: forall a. TwoOrThreeWay a -> Maybe a
lca} =
  ThreeWay {a
alice :: a
$sel:alice:ThreeWay :: a
alice, a
bob :: a
$sel:bob:ThreeWay :: a
bob, $sel:lca:ThreeWay :: a
lca = a -> Maybe a -> a
forall a. a -> Maybe a -> a
fromMaybe a
x Maybe a
lca}