Type error in function binding

Hi. I'm trying to write a code which counts the number of 'a's in a string. it looks like this : mycounter st = if st == [] then 0 else if head st == 'a' then 1 + mycounter tail st else mycounter tail st but it gives this error : ERROR "deneme.hs":19 - Type error in function binding *** Term :mycounter *** Type : [Char] -> b *** Does not match : ([a] -> [a]) -> [Char] -> b *** Because : unification would give infinite type I have no idea about what I'm doing wrong. Can you help me with this please?

On 15:50 Mon 02 Apr , bahadýr altan wrote:
Hi. I'm trying to write a code which counts the number of 'a's in a string. it looks like this :
mycounter st = if st == [] then 0 else if head st == 'a' then 1 + mycounter tail st else mycounter tail st
but it gives this error : ERROR "deneme.hs":19 - Type error in function binding *** Term :mycounter *** Type : [Char] -> b *** Does not match : ([a] -> [a]) -> [Char] -> b *** Because : unification would give infinite type
I have no idea about what I'm doing wrong. Can you help me with this please?
I didn't verify, but it could be that you need parenthesize the `counter tail st` part. A different kind of solution could be: counter [] = 0 counter ('a':xs) = 1 + counter xs counter (_:xs) = counter xs Or maybe even: `length $ filter (== 'a') xs` -- Mats Rauhala MasseR

You're missing some parenthesis. Instead of "mycounter tail st" write
"mycounter (tail st)".
On Mon, Apr 2, 2012 at 5:50 PM, bahadýr altan
Hi. I'm trying to write a code which counts the number of 'a's in a string. it looks like this :
mycounter st = if st == [] then 0 else if head st == 'a' then 1 + mycounter tail st else mycounter tail st
but it gives this error : ERROR "deneme.hs":19 - Type error in function binding *** Term :mycounter *** Type : [Char] -> b *** Does not match : ([a] -> [a]) -> [Char] -> b *** Because : unification would give infinite type
I have no idea about what I'm doing wrong. Can you help me with this please?
_______________________________________________ Beginners mailing list Beginners@haskell.org http://www.haskell.org/mailman/listinfo/beginners
-- Markus Läll

I think you are just missing parentheses: mycounter st = if st == [] then 0 else if head st == 'a' then 1 + mycounter (tail st) else mycounter (tail st) On 04/02/2012 04:50 PM, bahadýr altan wrote:
Hi. I'm trying to write a code which counts the number of 'a's in a string. it looks like this :
mycounter st = if st == [] then 0 else if head st == 'a' then 1 + mycounter tail st else mycounter tail st
but it gives this error : ERROR "deneme.hs":19 - Type error in function binding *** Term :mycounter *** Type : [Char] -> b *** Does not match : ([a] -> [a]) -> [Char] -> b *** Because : unification would give infinite type
I have no idea about what I'm doing wrong. Can you help me with this please?
_______________________________________________ Beginners mailing list Beginners@haskell.org http://www.haskell.org/mailman/listinfo/beginners
participants (4)
-
bahadýr altan
-
Markus Läll
-
Mats Rauhala
-
Nathan Hüsken