module Unison.Merge.PrettyPrintEnv
  ( makePrettyPrintEnvs,
  )
where

import Unison.Merge.TwoWay (TwoWay)
import Unison.Names (Names)
import Unison.Prelude
import Unison.PrettyPrintEnv.Names qualified as PPE
import Unison.PrettyPrintEnvDecl (PrettyPrintEnvDecl)
import Unison.PrettyPrintEnvDecl.Names qualified as PPED

-- Make PPE for Alice that contains all of Alice's names, but suffixified against her names + Bob's names
makePrettyPrintEnvs :: TwoWay Names -> Names -> TwoWay PrettyPrintEnvDecl
makePrettyPrintEnvs :: TwoWay Names -> Names -> TwoWay PrettyPrintEnvDecl
makePrettyPrintEnvs TwoWay Names
names2 Names
libdepsNames =
  TwoWay Names
names2 TwoWay Names
-> (Names -> PrettyPrintEnvDecl) -> TwoWay PrettyPrintEnvDecl
forall (f :: * -> *) a b. Functor f => f a -> (a -> b) -> f b
<&> \Names
names -> Namer -> Suffixifier -> PrettyPrintEnvDecl
PPED.makePPED (Names -> Namer
PPE.namer (Names
names Names -> Names -> Names
forall a. Semigroup a => a -> a -> a
<> Names
libdepsNames)) Suffixifier
suffixifier
  where
    suffixifier :: Suffixifier
suffixifier = Names -> Suffixifier
PPE.suffixifyByName (TwoWay Names -> Names
forall m. Monoid m => TwoWay m -> m
forall (t :: * -> *) m. (Foldable t, Monoid m) => t m -> m
fold TwoWay Names
names2 Names -> Names -> Names
forall a. Semigroup a => a -> a -> a
<> Names
libdepsNames)