data Contador = Cero | Incrementar Contador deriving Show es_cero :: Contador -> Bool decrementar :: Contador -> Contador -- se aplica a contadores no nulos es_cero Cero = True es_cero (Incrementar c) = False decrementar (Incrementar c) = c -- Ejemplos contadores :: [Contador] contadores = Cero : map Incrementar contadores cero = Cero uno = Incrementar cero dos = Incrementar uno tres = Incrementar dos cuatro = Incrementar tres -- Prototipo del chequeador de balanceo balanceo :: String -> Bool balanceo s = balanceo_rec s Cero balanceo_rec :: String -> Contador -> Bool balanceo_rec [] c = es_cero c balanceo_rec (a:as) c = if a == '(' then balanceo_rec as (Incrementar c) else if a == ')' then (not (es_cero c)) && (balanceo_rec as (decrementar c)) else balanceo_rec as c