module Plutarch.Pretty.Internal.Config (keywords, indentWidth, forcedPrefix) where

import Data.Set (Set)
import Data.Set qualified as Set
import Data.String (fromString)
import Data.Text (Text)

import Prettyprinter qualified as PP

import PlutusCore qualified as PLC

keywords :: Set Text
keywords :: Set Text
keywords =
  [Text] -> Set Text
forall a. Ord a => [a] -> Set a
Set.fromList ([Text] -> Set Text) -> [Text] -> Set Text
forall a b. (a -> b) -> a -> b
$
    [Item [Text]
Text
"let", Item [Text]
Text
"in"]
      [Text] -> [Text] -> [Text]
forall a. Semigroup a => a -> a -> a
<> (DefaultFun -> Text) -> [DefaultFun] -> [Text]
forall a b. (a -> b) -> [a] -> [b]
forall (f :: Type -> Type) a b. Functor f => (a -> b) -> f a -> f b
fmap (String -> Text
forall a. IsString a => String -> a
fromString (String -> Text) -> (DefaultFun -> String) -> DefaultFun -> Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Doc (Any @Type) -> String
forall a. Show a => a -> String
show (Doc (Any @Type) -> String)
-> (DefaultFun -> Doc (Any @Type)) -> DefaultFun -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. DefaultFun -> Doc (Any @Type)
forall a ann. Pretty a => a -> Doc ann
forall ann. DefaultFun -> Doc ann
PP.pretty) [(forall a. Bounded a => a
minBound @PLC.DefaultFun) .. Item [DefaultFun]
forall a. Bounded a => a
maxBound]

indentWidth :: Int
indentWidth :: Int
indentWidth = Int
2

-- | Prefix to use for naming forced builtin functions.
forcedPrefix :: Text
forcedPrefix :: Text
forcedPrefix = Text
"fr"