Seems like a good time to mention the Maybe monad looks like it would be a good fit here.

score :: String -> String -> Maybe String
score s [] = Nothing
score s g =
    if valid 4 g
    then let s1 = "Golds "
        s2 = show (gold s g)
        s3 = ", Silvers "
        s4 = show (silver s g)
        in Just (s1 ++ s2 ++ s3 ++ s4)
    else Just "Bad Guess"

-R. Kyle Murphy
--
Curiosity was framed, Ignorance killed the cat.


On Tue, Mar 9, 2010 at 17:42, Brent Yorgey <byorgey@seas.upenn.edu> wrote:
On Tue, Mar 09, 2010 at 08:42:44PM +0100, Sebastian Hungerecker wrote:
> On 09.03.2010 20:04, boblettoj wrote:
>> score :: String ->  String ->  String
>> score [s] [] = false
>> score [s] [g] =
>>      if valid 4 g
>>      then (s1 ++ s2 ++ s3 ++ s4) where
>>              s1 = "Golds "
>>              s2 = show (gold s g)
>>              s3 = ", Silvers "
>>              s4 = show (silver s g)
>>      else "Bad Guess"
>>
>
> Apart from the parse error there is also a type error
> in your code:
> When the second argument is empty, you return false
> although you declared the function to return a String,
> not a boolean.

Not quite; data Bool = True | False, and the code uses a lowercase 'f'
'false'. Perhaps 'false' is defined as a String somewhere else?  A bit
odd, perhaps, but not necessarily a type error.

-Brent
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe