packages feed

language-ocaml-0.1.31: lib/Language/OCaml/PrettyPrinter/PatternDesc.hs

{-# OPTIONS_GHC -fno-warn-orphans #-}

{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE LambdaCase #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE UndecidableInstances #-}

module Language.OCaml.PrettyPrinter.PatternDesc
  ( patternDescPP
  ) where

import Data.Text.Prettyprint.Doc

import Language.OCaml.Definitions.Parsing.ParseTree
import Language.OCaml.PrettyPrinter.ModuleBinding   ()
import Language.OCaml.PrettyPrinter.OpenDescription ()
import Language.OCaml.PrettyPrinter.TypeDeclaration ()

patternDescPP :: Pretty Pattern => PatternDesc -> Doc a
patternDescPP = \case

  PpatAlias _p _v -> error "TODO"

  PpatAny -> "_"

  PpatArray _ -> error "TODO"
  PpatConstant _c -> error "TODO"
  PpatConstraint _ _ -> error "TODO"

  PpatConstruct i p -> case p of
    Nothing -> pretty i
    Just p' ->
      -- NOTE: adding space here so as to print `Constructor _` rather than `Constructor_`
      fillCat [ pretty i, space, pretty p' ]

  PpatException _ -> error "TODO"
  PpatExtension _ -> error "TODO"
  PpatInterval _ _ -> error "TODO"
  PpatLazy _ -> error "TODO"
  PpatOpen _ _ -> error "TODO"

  PpatOr p1 p2 -> vcat [ pretty p1, fillSep [ pipe, pretty p2 ] ]

  PpatRecord _ _ -> error "TODO"

  PpatTuple l -> encloseSep "(" ")" "," $ map pretty l

  PpatType _ -> error "TODO"
  PpatUnpack _ -> error "TODO"

  PpatVar v -> pretty v

  PpatVariant _ _ -> error "TODO"

instance Pretty Pattern => Pretty PatternDesc where
  pretty = patternDescPP