
I do agree you should look at the tutorial but to answer your questions, see below: 1) what's the difference between these two code statements? I'm
convinced they should be the same
type T = [Char] type CurrentValue = Char
You could think of the type keyword as aliasing an existing type to one that you name. For instance, T can now be used interchangeably with the [Char] type, like in a type declaration: upcase :: [Char] -> [Char] can be: upcase :: T -> T and they would mean the same thing. You do this usually for the sake of documentation, where the alias you are creating is more readable than that which it aliases. [Char] means an array of Chars. String, for example is I believe defined as: type String = [Char]
2) What is Maybe String?
Maybe String is a datatype that could be 1 of 2 things, a String or Nothing. Maybe is used a lot of the time for computations that may fail, such as looking for a needle in a haystack: findNeedle :: NeedleID -> Haystack -> Maybe Needle In that example, findNeedle would return the value: Just someneedle OR it would return Nothing if it could not be found. I encourage you to read up on the tutorial that David Place submitted for more information.
For instance: type P = (Char, Maybe String)
P in this case is a tuple or pair. That's what the parentheses are for. It means that the first field of the tuple is a Char, the second field of of the tuple can either be a string or nothing. Again, this is a type, not a value or a function.
3) What is Maybe Char ?
See above. -- Michael Xavier http://www.michaelxavier.net