[Haskell-cafe] how can I do this the best

Richard A. O'Keefe ok at cs.otago.ac.nz
Tue Feb 24 01:07:56 UTC 2015


On 24/02/2015, at 5:19 am, Roelof Wobben <r.wobben at home.nl> wrote:

> I tried it another way more like explained on this page :  http://www.seas.upenn.edu/~cis194/spring13/lectures/02-ADTs.html
> 
> so I tried this : 
> 
> parseMessage :: [Char] -> [Char]
> parseMessage s
> case Errornumber of 
>     IsDigit Errornumber  -> "Geldige string"
>     otherwise            -> "Ongeldige string"
>   where
>       Error = s words
>       Errornumber = Error(ErrorNumber _ _ )
>       Errorcode = Error(_ Errorcode _ )
> 
> but now I cannot use where :( 

That's not your problem.

IsDigit ErrorNumber is not a pattern.

parseMessage s =
    if isDigit errorNumber then "Geldige string"
    else                        "Ongelidige string"
  where
    errorNumber = ???

is OK.  

Now I cannot make sense of
    Error = s words

	identifiers beginning with capital letters are used for
	- module names
	- type constructors
	- data constructors
	You want a variable here, so it must begin with a
	lower case letter.

	s words treats a string s as a function and applies it
	to the function words as argument: s(words).  But that
	does not type check.  You mean words s.

	The result of words s, whatever else it may be, is not
	an error.

    Errornumber = Error(ErrorNumber _ _)

	In the form "expr where pattern = expr", the thing after
	the equal sign must be an expression.  But
	Error(ErrorNumber _ _) is not an expression.  "_" is a
	PATTERN (= I do not care what goes here) but never an
	EXPRESSION (because what value would it have?).




More information about the Haskell-Cafe mailing list