packages feed

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

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

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

module Language.OCaml.PrettyPrinter.StructureItemDesc
  ( structureItemDescPP
  ) where

import Data.Text.Prettyprint.Doc

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

structureItemDescPP ::
  (Pretty Payload) => StructureItemDesc -> Doc a
structureItemDescPP = \case

  PstrAttribute _a -> error "TODO"
  PstrClass _ -> error "TODO"
  PstrClassType _ -> error "TODO"

  PstrEval e _a -> pretty e

  PstrException _e -> error "TODO"
  PstrExtension _e _a -> error "TODO"
  PstrInclude _ -> error "TODO"
  PstrModType _ -> error "TODO"

  PstrModule m -> pretty m

  PstrOpen o -> pretty o

  PstrPrimitive _ -> error "TODO"
  PstrRecModule _ -> error "TODO"

  PstrType _r l -> case l of
    []  -> error "?"
    h:t -> vcat $ fillSep [ "type", pretty h ]
                    : map ((\ d -> fillSep [ "\nand", d]) . pretty) t

  PstrTypExt _ -> error "TODO"

  PstrValue r l -> case l of
    [] -> error "?"
    h : t ->
      vcat $ []
      ++ [ fillCat [ "let ", pretty r, pretty h ] ]
      ++ map ((\ d -> fillSep [ "\nand", d ]) . pretty) t

instance (Pretty Payload) => Pretty StructureItemDesc where
  pretty = structureItemDescPP