module Unison.NameSegment
  ( NameSegment,
    toUnescapedText,

    -- * Sentinel name segments
    defaultPatchSegment,
    docSegment,
    libSegment,
    pattern LibSegment,
    publicLooseCodeSegment,
    baseSegment,
    snocSegment,
    consSegment,
    concatSegment,
    watchSegment,
    setSegment,
    modifySegment,
    licenseSegment,
    metadataSegment,
    authorsSegment,
    copyrightHoldersSegment,
    guidSegment,
    builtinSegment,
  )
where

import Unison.NameSegment.Internal (NameSegment (NameSegment, toUnescapedText))

------------------------------------------------------------------------------------------------------------------------
-- special segment names

defaultPatchSegment :: NameSegment
defaultPatchSegment :: NameSegment
defaultPatchSegment = Text -> NameSegment
NameSegment Text
"patch"

docSegment :: NameSegment
docSegment :: NameSegment
docSegment = Text -> NameSegment
NameSegment Text
"doc"

libSegment :: NameSegment
libSegment :: NameSegment
libSegment = Text -> NameSegment
NameSegment Text
"lib"

pattern LibSegment :: NameSegment
pattern $mLibSegment :: forall {r}. NameSegment -> ((# #) -> r) -> ((# #) -> r) -> r
$bLibSegment :: NameSegment
LibSegment = NameSegment "lib"

publicLooseCodeSegment :: NameSegment
publicLooseCodeSegment :: NameSegment
publicLooseCodeSegment = Text -> NameSegment
NameSegment Text
"public"

baseSegment :: NameSegment
baseSegment :: NameSegment
baseSegment = Text -> NameSegment
NameSegment Text
"base"

snocSegment :: NameSegment
snocSegment :: NameSegment
snocSegment = Text -> NameSegment
NameSegment Text
":+"

consSegment :: NameSegment
consSegment :: NameSegment
consSegment = Text -> NameSegment
NameSegment Text
"+:"

concatSegment :: NameSegment
concatSegment :: NameSegment
concatSegment = Text -> NameSegment
NameSegment Text
"++"

watchSegment :: NameSegment
watchSegment :: NameSegment
watchSegment = Text -> NameSegment
NameSegment Text
">"

setSegment :: NameSegment
setSegment :: NameSegment
setSegment = Text -> NameSegment
NameSegment Text
"set"

modifySegment :: NameSegment
modifySegment :: NameSegment
modifySegment = Text -> NameSegment
NameSegment Text
"modify"

licenseSegment :: NameSegment
licenseSegment :: NameSegment
licenseSegment = Text -> NameSegment
NameSegment Text
"License"

metadataSegment :: NameSegment
metadataSegment :: NameSegment
metadataSegment = Text -> NameSegment
NameSegment Text
"metadata"

authorsSegment :: NameSegment
authorsSegment :: NameSegment
authorsSegment = Text -> NameSegment
NameSegment Text
"authors"

copyrightHoldersSegment :: NameSegment
copyrightHoldersSegment :: NameSegment
copyrightHoldersSegment = Text -> NameSegment
NameSegment Text
"copyrightHolders"

guidSegment :: NameSegment
guidSegment :: NameSegment
guidSegment = Text -> NameSegment
NameSegment Text
"guid"

builtinSegment :: NameSegment
builtinSegment :: NameSegment
builtinSegment = Text -> NameSegment
NameSegment Text
"builtin"