The error in ghci is

Couldn't match expected type `Int' with actual type `[a0]'
    In the expression: []
    In an equation for `p': p [] = []

You've defined p as [String] -> Int, but then your base case is p [] = []. [] 
is not an Int. I changed it to 0 and it'll compile, at least, but I'm not sure 
if that's the effect you're after.

http://hpaste.org/48324
Edited code (really just indentation changes and the change from p [] = [] to p 
[] = 0)

On Jun 25, 2011, at 3:19 PM, Stoyan Peev wrote:

> First I am using WinHugs.
> 
> that's the code i made so far but it's still not working:
> 
> http://hpaste.org/48318
> 
> 
> Error:
> ERROR file:.\kursovazadacha.hs:36 - Type error in explicitly typed binding
> *** Term           : p
> *** Type           : [String] -> [a]
> *** Does not match : [String] -> Int
> 
> 
> I'm still breaking down somewhere ...
> 
> 
> 
> 2011/6/25 Daniel Patterson <lists.hask...@dbp.mm.st>:
>> what haskell compiler are you using? And what does the "include" line do?
>> 
>> That does not look like a GHC error message (the only compiler I'm familiar 
>> with), but it seems like it is saying that you should not have the extra 
>> newlines between the function type signature and declaration. - that's only 
>> my guess, based on the assumption that the whitespace is being converted to 
>> a syntax with explicit semilcolon line terminations.
>> 
>> now, looking at the actual code, the type of the parse function is [a] -> 
>> [a]. This means that you can parse a list of anything into a list of 
>> anything, which doesnt make much sense. This should probably be [String] -> 
>> [String]  (you are parsing a list of strings to a list of strings, yes?). 
>> Now the base case of parse (the first case) makes sense, but look at the 
>> second case. parse is being given a list of elements (which you have used 
>> pattern matching to decompose, but the whole argument, (x:xs), is a list of 
>> elements). You are then passing that, unchanged, to eval. This means that 
>> eval must take the same type. Does it? how would you apply eval to each 
>> element in that list, instead of just applying it to the whole list?
>> 
>> On Jun 24, 2011, at 4:31 PM, Stoyan Peev wrote:
>> 
>>> I found the library myself, and i already put the code in that site:
>>> 
>>> http://hpaste.org/48277
>>> 
>>> 
>>> 
>>> That's what i have tried to do for making the task by calling the one
>>> string function by another one:
>>> 
>>> include kursovazadacha
>>> 
>>> parse :: [a] -> [a]
>>> 
>>> parse [] = []
>>> 
>>> parse (x:xs) = eval (x:xs)
>>> 
>>> 
>>> The error from the compiler:
>>> 
>>> ERROR file:.\list.hs:3 - Syntax error in declaration (unexpected `;',
>>> possibly due to bad layout)
>>> 
>>> 
>>> On Fri, Jun 24, 2011 at 11:20 PM, Daniel Patterson
>>> <lists.hask...@dbp.mm.st> wrote:
>>>> What have you tried to do in order to make it work for the list, and what 
>>>> error results? What is confusing about the error message? More generally, 
>>>> how could you transform an operation on a single string into one that does 
>>>> the same thing to a list of strings? You've probably talked about higher 
>>>> order functions in your class - would any of the common ones (filter, map, 
>>>> foldr) be helpful here? Would any encapsulate what you are trying to do?
>>>> 
>>>>  If you include these kinds of things, I think you'll find this community 
>>>> to be very helpful; without that (showing what your thought process is, 
>>>> why it isn't working, what seems confusing about what the haskell compiler 
>>>> is telling you, etc), you are not going to get help here. People here are 
>>>> very friendly and willing to help people learn; this is not a place to 
>>>> come to get an assignment finished :)
>>>> 
>>>> Also, could you put the library you are using (I'm assuming that this is 
>>>> provided by your university) and the code on somewhere like hpaste.org, so 
>>>> that the formatting is not messed up by email, and it is syntax 
>>>> highlighted?
>>>> 
>>>> On Jun 24, 2011, at 3:57 PM, Stoyan Peev wrote:
>>>> 
>>>>> Hello all,
>>>>> 
>>>>> I am experiencing some issues to do my course task in university.
>>>>> 
>>>>> I have to write a calculator- function in Haskell. The function
>>>>> argument is a list of strings and also form such list, as each string
>>>>> of the argument made definite action:
>>>>> - If the string has the form of an arithmetic _expression_ - calculate
>>>>> this _expression_. The string result becomes part of the list-result.
>>>>> If the _expression_ contains a variable which is not assigned value,
>>>>> the result is displayed "undefined".
>>>>> - If the string has the form- Name = value calculated from the last
>>>>> _expression_ is assigned to the variable with the corresponding name
>>>>> in the list, and in the result list is formed a string with type
>>>>> - If there is not a calculated _expression_ to be assigned to form a
>>>>> string "no value".
>>>>> - If the string is non-blank, but there is a species different from
>>>>> the above two case, form the string "error".
>>>>> - If the string is empty, incl. when it contains only spaces, in the
>>>>> result there is not form a string.
>>>>> 
>>>>> Expressions consist of integers without sign variables, operations +
>>>>> (Addition), - (subtraction), * (multiplication) and / (divide) and
>>>>> parentheses. Where no brackets, the operations are performed from left
>>>>> to right, but * and / precede the + and -. Implementation of any
>>>>> operation gives integer; in the division rejected the fractional part,
>>>>> if any.
>>>>> Variables have names of one letter - from the Latin small letter. In
>>>>> the beginning, end or between the elements of each row can have spaces
>>>>> - they are irrelevant to its correctness.
>>>>> Example: the list-argument
>>>>> ["3 +7 / 2" "2 + x", "= s", "2 * s +4", "", "2 + +4 / 5]
>>>>> function should provide a result-list
>>>>> ["6", "undefined", "s = 6", "16", "error"].
>>>>> 
>>>>> 
>>>>> I say another person have the same task, but he didn't do anything. I
>>>>> started doing this task myself but i get stuck in the middle. Then i
>>>>> started searching for something that could help me and find out you :)
>>>>> 
>>>>> The code i have written so far uses the library file "Parsing.lhs"
>>>>> but what i have written is taking those actions that i already
>>>>> described, only for a string. I cannot modify it to work for list of
>>>>> string, and complete the whole task.
>>>>> 
>>>>> I'll be glad to finish the task myself, but i am going to need some help.
>>>>> 
>>>>> Here is the code i have already written:
>>>>> 
>>>>> 
>>>>> import Parsing
>>>>> 
>>>>> expr                          :: Parser Int
>>>>> expr                          =  do t <- term
>>>>>                                    do symbol "+"
>>>>>                                       e <- expr
>>>>>                                       return (t+e)
>>>>>                                      +++ do symbol "-"
>>>>>                                             e <- expr
>>>>>                                             return (t-e)
>>>>>                                      +++ return t
>>>>> term                          :: Parser Int
>>>>> term                          =  do f <- factor
>>>>>                                    do symbol "*"
>>>>>                                       t <- term
>>>>>                                       return (f * t)
>>>>>                                      +++ do symbol "/"
>>>>>                                             t <- term
>>>>>                                             return (f-t)
>>>>>                                      +++ return f
>>>>> factor                        :: Parser Int
>>>>> factor                        =  do symbol "("
>>>>>                                    e <- expr
>>>>>                                    symbol ")"
>>>>>                                    return e
>>>>>                                  +++ natural
>>>>> eval                          :: String -> Int
>>>>> eval xs                       =  case (parse expr xs) of
>>>>>                                    [(n,[])]  -> n
>>>>>                                    [(_,out)] -> error ("undefined")
>>>>>                                    []        -> error "error"
>>>>> 
>>>>> 
>>>>> 
>>>>> Thanks all in advance :)
>>>>> 
>>>>> --
>>>>> Best Wishes
>>>>> Stoyan Peev
>>>>> 
>>>>> _______________________________________________
>>>>> Haskell-Cafe mailing list
>>>>> Haskell-Cafe@haskell.org
>>>>> http://www.haskell.org/mailman/listinfo/haskell-cafe
>>>> 
>>>> 
>>> 
>>> 
>>> 
>>> --
>>> Поздрави,
>>> Стоян Пеев
>> 
>> 
> 
> 
> 
> -- 
> Поздрави,
> Стоян Пеев
> 
> _______________________________________________
> Haskell-Cafe mailing list
> Haskell-Cafe@haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-cafe

Attachment: 398E692F.asc
Description: application/apple-msg-attachment


Attachment: PGP.sig
Description: This is a digitally signed message part

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

Reply via email to