
nowgate:
Thanks! I figured I was close.
Didn't even know const was available.
I put together a compliment functions earlier
complement :: (a -> Bool) -> a -> Bool complement p x = not (p x)
By the signature, the first argument is a function (predicate) which when given a value returns a Bool? And the second argument is just a value? And the function returns a Bool?
map (complement odd) [1,2,3,4,5,6] [False,True,False,True,False,True]
By similar reasoning the always function would seem to have a signature
a -> (b -> a)
where the first argument is just a value and the return value is a function that when given a possibly different value just returns the value originally given to always?
Yep. Which may be written as: const :: a -> b -> a
Is that reasoning OK? Are
a -> (b -> a) and a -> b -> a the same signature?
Yep.
So the inferred type is usually pretty accurate? These
Yes :-)
I'm using Hugs/Win XP just to scope out the language right now. I tried what you suggested and got
Hugs> let always x _ = x ERROR - Syntax error in expression (unexpected end of input) Hugs>
let-bindings aren't supported in Hugs at the prompt, the solution is to load the source from a file, with :reload, as you change it. You can define them in GHC/GHCi however. Also, you can use them locally as: let always x _ = x in always 1 "foo" -- Don