-- | Utilities for defining Read\/Show instances.
module Data.Array.Parallel.Base.Text (
  showsApp, readApp, readsApp,
  Read(..)
) where
import Text.Read

showsApp :: Show a => Int -> String -> a -> ShowS
showsApp k fn arg = showParen (k>10) 
                    (showString fn . showChar ' ' . showsPrec 11 arg)

readApp :: Read a => String -> ReadPrec a
readApp fn = parens (prec 10 $
  do
    Ident ide <- lexP
    if ide /= fn then pfail else step readPrec
  )

readsApp :: Read a => Int -> String -> ReadS a
readsApp k fn = readPrec_to_S (readApp fn) k