/*
	Show Wrapped Node

	Version 1.0.5
	Ronny Wichers Schreur
	ronny@cs.ru.nl
*/
definition module ShowWrapped

from Wrap import ::DeeplyWrappedNode, ::WrappedNode, ::WrappedArg, class wrap

:: ShowWrappedOptions
	=	Don`tShowParentheses | ShowParentheses
	// in list implies don't parenthesise
	|	ShowInList | ShowInUnboxedList | ShowInUnboxedRecordList

class showWrapped a :: !ShowWrappedOptions !a -> [{#Char}]

instance showWrapped (WrappedNode arg) | showWrapped arg
instance showWrapped WrappedArg

showWrappedNode :: a -> [{#Char}] | showWrapped a
showApplication :: ShowWrappedOptions {#Char} {!arg} -> [{#Char}]
															| showWrapped arg

class prune a | wrap a where
	prune :: !Int !Int !Int a -> a

instance prune (WrappedNode a) | prune a
instance prune WrappedArg
pruneArray :: !Int !Int !Int !{!a} -> {!a} | prune a

chop :: !Int [{#Char}] -> [{#Char}]
