Мне нужно написать функцию par :: String -> Bool
, чтобы проверить, совпадает ли данная строка с круглыми скобками, используя модуль стека.
Ex:
par "(((()[()])))" = True
par "((]())" = False
Вот моя реализация стекового модуля:
module Stack (Stack,
push, pop, top,
empty, isEmpty)
where
data Stack a = Stk [a]
deriving (Show)
push :: a -> Stack a -> Stack a
push x (Stk xs) = Stk (x:xs)
pop :: Stack a -> Stack a
pop (Stk (_:xs)) = Stk xs
pop _ = error "Stack.pop: empty stack"
top :: Stack a -> a
top (Stk (x:_)) = x
top _ = error "Stack.top: empty stack"
empty :: Stack a
empty = Stk []
isEmpty :: Stack a -> Bool
isEmpty (Stk [])= True
isEmpty (Stk _) = False
Поэтому мне нужно реализовать функцию par
, которая бы проверяла строку скобок и говорила, сбалансированы ли скобки в ней или нет. Как я могу сделать это, используя стек?