crislanio_macedo Posted May 20, 2014 Report Share Posted May 20, 2014 Como fazer para que a saída do código fique, como pilha de altura ____ e topo ___ dá o seguinte erro. Expecting one more argument to `Stack' In the instance declaration for `Show Stack' Failed, modules loaded: none. Me ajudem pois eu não sei manipular instancias. --import Stack --nao importa.. module Stack (Stack, top, mStack, isEmpty) where data Stack a = Stk [a] deriving (Read, Eq, Ord, Show) -- | Empty | Top a | (Stack a) deriving (Show) top (Stk (x:xs)) = x top _ = error "Stack.top: Pilha vazia" mStack :: [a] -> Stack a mStack xs = foldr push empty xs isEmpty :: Stack a -> Bool -- verificar se a pilha está vazia isEmpty (Stk []) = True isEmpty _ = False size :: Stack a -> Int -- tamanho da pilha size s | isEmpty s = 0 | otherwise = 1 + size (pop s) -- saida desejada putStr ("Pilha de Altura" >> size ++ " e topo " ++ top ++ "!\n") Link to comment Share on other sites More sharing options...
Baderous Posted May 21, 2014 Report Share Posted May 21, 2014 Se o que queres é que sempre que imprimes a stack, ela seja apresentada com essa frase, então tens de criar uma instância de Show para o tipo Stack, e não usar uma instância derivada do tipo (como estás a fazer com o deriving Show), porque isso vai simplesmente fazer o show com base nos tipos usados para definir o tipo Stack, complementado com o show do construtor. Portanto, para definires a instância que referi, terás de fazer algo do género: instance (Show a) => Show (Stack a) where show st@(Stk s) = "Pilha de altura >> " ++ size st ++ " e topo " ++ top st ++ "!" Aquela pré-condição (Show a) indica que para fazer o Show (Stack a) é necessário saber fazer o Show dos elementos da stack. Por exemplo, se agora definires um tipo algébrico qualquer e quiseres fazer o show duma stack de elementos desse tipo, tens de ter o show desse tipo definido (via instância derivada ou user-defined). 1 Report Link to comment Share on other sites More sharing options...
ricardoneves93 Posted June 5, 2014 Report Share Posted June 5, 2014 (edited) Obrigado Edited June 5, 2014 by ricardoneves93 http://www.speedtest.net/result/2682095343.png Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now