dardevil Posted July 14, 2012 at 11:12 AM Report Share #468653 Posted July 14, 2012 at 11:12 AM Bom dia pessoal! Alguém me consegue explicar como se vê o tipo de uma função sem utilizar um interpretador. Por exemplo: f x y z = (length (y ++ (fst x))) == (2*z) Expressões normais que não utilizem funções consigo saber o tipo mas com funções não percebo. Link to comment Share on other sites More sharing options...
Baderous Posted July 14, 2012 at 11:30 AM Report Share #468654 Posted July 14, 2012 at 11:30 AM (edited) Pelo uso da função (==) facilmente se determina que o tipo final é Bool. Depois, sabe-se que x é um par pois sobre ele é aplicada a função fst, que devolve o 1º elemento de um par. Como depois é usada a função (++), que concatena listas, facilmente se determina que quer y, quer o 1º elemento de x são listas (cujos elementos têm de ser do mesmo tipo). Até porque depois vai-se usar o length sobre o resultado dessa concatenação, devolvendo o tamanho da lista resultante. O z é um Num pois a função (*) faz parte da classe Num. No entanto, como o resultado de 2*z vai ser comparado com o length (que devolve um Int), pode-se deduzir que z será também um Int (que é um tipo que é instância de Num). Logo, o tipo será: f :: ([a],b) -> [a] -> Int -> Bool Edited July 14, 2012 at 11:31 AM by Baderous 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