Send Beginners mailing list submissions to
[email protected]
To subscribe or unsubscribe via the World Wide Web, visit
http://www.haskell.org/mailman/listinfo/beginners
or, via email, send a message with subject or body 'help' to
[email protected]
You can reach the person managing the list at
[email protected]
When replying, please edit your Subject line so it is more specific
than "Re: Contents of Beginners digest..."
Today's Topics:
1. Re: [Haskell-cafe] parser error in pattern (kolli kolli)
2. doubt....plz help me out (kolli kolli)
3. Re: [Haskell-cafe] parser error in pattern (Michael Xavier)
4. Re: doubt....plz help me out (jean verdier)
5. recursion and pattern matching (Alia)
6. Re: Non exhaustive pattern match not flagged? (Hugo Ferreira)
7. Re: newbie: Monad, equivalent notation using
Control.Monad.guard (Hugo Ferreira)
----------------------------------------------------------------------
Message: 1
Date: Mon, 17 Oct 2011 16:14:06 -0600
From: kolli kolli <[email protected]>
Subject: Re: [Haskell-beginners] [Haskell-cafe] parser error in
pattern
To: Ivan Lazar Miljenovic <[email protected]>
Cc: [email protected]
Message-ID:
<cae7d9k6ojj5yxehjht_ktz54-a9ncw5mxck7+bqqnae5djw...@mail.gmail.com>
Content-Type: text/plain; charset="iso-8859-1"
I didnt understand properly but made changes according to what I
understood..Its still giving me the same error
eval1(If t1 t2 t3) = case (If t1 t2 t3) of
eval1(If t1 t2 t3) -> Just t1
On Mon, Oct 17, 2011 at 4:10 PM, Ivan Lazar Miljenovic <
[email protected]> wrote:
> On 18 October 2011 09:08, kolli kolli <[email protected]> wrote:
> > actual error message is
> >
> > homework2.lhs:137:20: parse error on input `where'
> >
> > data Term = Tru
> > | Fls
> > | If Term Term Term
> > | Zero
> > | Succ Term
> > | Pred Term
> > | IsZero Term
> > deriving Eq
> >
>
> As I said, the error is from your incorrect usage of the case
> statement; it _should_ look something like:
>
> case foo of
> bar -> baz
> bar' -> baz'
>
> >
> >
> >
> >
> > On Mon, Oct 17, 2011 at 4:03 PM, Ivan Lazar Miljenovic
> > <[email protected]> wrote:
> >>
> >> On 18 October 2011 08:56, kolli kolli <[email protected]> wrote:
> >> > after parsing a string i am evaluating it...
> >> > string if t1 then t2 else t3
> >> > my code is
> >> > eval1 :: Term -> Maybe Term
> >> > eval1(If Tru t2 t3) = Just t2
> >> > eval1(If Fls t2 t3) = Just t3
> >> > eval1(If t1 t2 t3) = case eval t1
> >> > where eval1(If t1 t2 t3) = Just t1
> >> >
> >> > eval :: Term -> Term
> >> > eval (IsZero Zero) = Tru
> >> > eval (Zero) = Zero
> >> > eval(Pred Zero) = Pred Zero
> >>
> >> Your case statement is incomplete for starters...
> >>
> >> Can you please provide the actual error message as well? Your
> >> definition of Term would also be useful.
> >>
> >> >
> >> > On Mon, Oct 17, 2011 at 3:46 PM, Ivan Lazar Miljenovic
> >> > <[email protected]> wrote:
> >> >>
> >> >> On 18 October 2011 08:43, kolli kolli <[email protected]>
> wrote:
> >> >> > hey can anyone tell me what is parser error in parser??Plz help me
> >> >> > out
> >> >>
> >> >> It's when the parser can't parse what it's provided.... providing the
> >> >> code that caused the problem and the actual error message is required
> >> >> for a more detailed explanation.
> >> >>
> >> >> --
> >> >> Ivan Lazar Miljenovic
> >> >> [email protected]
> >> >> IvanMiljenovic.wordpress.com
> >> >
> >> >
> >>
> >>
> >>
> >> --
> >> Ivan Lazar Miljenovic
> >> [email protected]
> >> IvanMiljenovic.wordpress.com
> >
> >
>
>
>
> --
> Ivan Lazar Miljenovic
> [email protected]
> IvanMiljenovic.wordpress.com
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL:
<http://www.haskell.org/pipermail/beginners/attachments/20111017/81b66853/attachment-0001.htm>
------------------------------
Message: 2
Date: Mon, 17 Oct 2011 20:17:04 -0600
From: kolli kolli <[email protected]>
Subject: [Haskell-beginners] doubt....plz help me out
To: [email protected]
Message-ID:
<cae7d9k5txd9ghcfzo6orau-x4qkm2h+qdion0oykxc5tqb7...@mail.gmail.com>
Content-Type: text/plain; charset="iso-8859-1"
I am new to haskell plz dnt mind
scan :: [Char] -> Token
scan ('i':'f':tl) = IfKeyword
scan ('t':'h':'e':'n':tl) = ThenKeyword
scanp :: [Char] -> [Token]
scanp t = sequence (map scan t)
when I call scan on my file which has "if then"
then its just printing if as IfKeyword ..its nt talking the then word
I tried using sequence but its nt working..Can you please help me out..
I have to get the output as a list of tokens
[IfKeyword, ThenKeyword]
-------------- next part --------------
An HTML attachment was scrubbed...
URL:
<http://www.haskell.org/pipermail/beginners/attachments/20111017/77b994e2/attachment-0001.htm>
------------------------------
Message: 3
Date: Mon, 17 Oct 2011 19:20:45 -0700
From: Michael Xavier <[email protected]>
Subject: Re: [Haskell-beginners] [Haskell-cafe] parser error in
pattern
To: kolli kolli <[email protected]>
Cc: Ivan Lazar Miljenovic <[email protected]>,
[email protected]
Message-ID:
<CANk=zmEhXrGqwzJXKqZHw8CHEuWq9L=kp7u_u6wrxdj9q-n...@mail.gmail.com>
Content-Type: text/plain; charset="iso-8859-1"
I'm finding it really hard to grok what this is even supposed to do but you
have:
eval1(If t1 t2 t3) = case (If t1 t2 t3) of
eval1(If t1 t2 t3) -> Just t1
Case doesn't work that way. It would be something like:
eval1 (If t1 t2 t3) = case (some expression) of
pattern1 -> somevalue
pattern2 -> anothervalue
I don't see the intent of pattern matching the exact argument to eval1.
What is the type of eval1?
Also, your filename is homework2.hs. Please read this page on the Haskell
wiki:
http://www.haskell.org/haskellwiki/Homework_help
That's not to say you shouldn't ask these questions here but note that most
of us will not do your homework for you. We will provide hints, but you
should be doing your due diligence to try to understand what your code is
doing and possible reasons why it isn't working.
--
Michael Xavier
http://www.michaelxavier.net
LinkedIn <http://www.linkedin.com/pub/michael-xavier/13/b02/a26>
-------------- next part --------------
An HTML attachment was scrubbed...
URL:
<http://www.haskell.org/pipermail/beginners/attachments/20111017/8b86b70a/attachment-0001.htm>
------------------------------
Message: 4
Date: Tue, 18 Oct 2011 08:13:52 +0200
From: jean verdier <[email protected]>
Subject: Re: [Haskell-beginners] doubt....plz help me out
To: kolli kolli <[email protected]>
Cc: [email protected]
Message-ID: <[email protected]>
Content-Type: text/plain; charset="UTF-8"
You forgot to process the tail part of the scanned string. Do something
with the tl binding in the scan function. Note that the scan function
returns Token and not [Token].
On Mon, 2011-10-17 at 20:17 -0600, kolli kolli wrote:
> I am new to haskell plz dnt mind
>
>
> scan :: [Char] -> Token
> scan ('i':'f':tl) = IfKeyword
> scan ('t':'h':'e':'n':tl) = ThenKeyword
> scanp :: [Char] -> [Token]
> scanp t = sequence (map scan t)
>
> when I call scan on my file which has "if then"
> then its just printing if as IfKeyword ..its nt talking the then word
>
> I tried using sequence but its nt working..Can you please help me
> out..
>
> I have to get the output as a list of tokens
>
> [IfKeyword, ThenKeyword]
> _______________________________________________
> Beginners mailing list
> [email protected]
> http://www.haskell.org/mailman/listinfo/beginners
------------------------------
Message: 5
Date: Tue, 18 Oct 2011 01:34:14 -0700 (PDT)
From: Alia <[email protected]>
Subject: [Haskell-beginners] recursion and pattern matching
To: "[email protected]" <[email protected]>
Message-ID:
<[email protected]>
Content-Type: text/plain; charset=iso-8859-1
I have a question about what's the idiomatic way to walk a tree where there is
also a requirement
for pattern-matching to draw variables out of the Node 'container':
<Test.hs>
module Test
where
data Tree a b = EmptyTree | Node a b [Tree a b]
??????????? deriving (Show, Read, Eq)?
?
t =? Node "goal" 1.0 [
??????? Node "c1" 0.5 [
??????????? Node "c3" 3.0 [
??????????????? Node "c5" 1.0 []
??????????????? ]
??????????? ],
??????? Node "c2" 0.5 [
??????????? Node "c4" 2.0 []
??????????? ]
???? ]
sumTree :: (Num b) => Tree a b -> b
sumTree EmptyTree = 0
sumTree (Node _ value []) = value
sumTree (Node _ value [x]) = value + sumTree x
sumTree (Node name value (x:xs)) = value + sumTree x + sumTree (Node name 0 xs)
depth :: Tree a b -> Int
depth EmptyTree = 0
depth (Node _ _ []) = 1
depth (Node _ _ [x]) = 1 + depth x
depth (Node n v (x:xs)) = 1 + depth (Node n v xs)?
</Test.hs>
Interactively:
*Test> sumTree t
8.0
*Test> depth t
4
*Test>
This seems to work, but I have a sense that one should use folds and fmap and
that there
is a better and cleaner what to do this.
Any help would be much appreciated.
Thanks
AK
------------------------------
Message: 6
Date: Tue, 18 Oct 2011 09:52:57 +0100
From: Hugo Ferreira <[email protected]>
Subject: Re: [Haskell-beginners] Non exhaustive pattern match not
flagged?
To: Henk-Jan van Tuyl <[email protected]>
Cc: [email protected]
Message-ID: <[email protected]>
Content-Type: text/plain; charset=ISO-8859-15; format=flowed
On 10/17/2011 04:53 PM, Henk-Jan van Tuyl wrote:
> On Mon, 17 Oct 2011 17:39:49 +0200, Hugo Ferreira <[email protected]>
> wrote:
>
>> f :: [a] -> [b] -> Int
>> --f [] _ = error "undefined for empty array"
>> f _ [] = error "undefined for empty array"
>> f (_:xs) (_:ys) = length xs + length ys
>>
>> I get a warning:
>>
>> Warning: Pattern match(es) are non-exhaustive
>> In an equation for `f': Patterns not matched: [] (_ : _)
>>
>> as expected. But for:
>>
>> bigrams :: [a] -> [[a]]
>> --bigrams [] = []
>> bigrams [_] = []
>> bigrams xs = take 2 xs : bigrams (tail xs)
>>
>> I don't. Why is the first predicate not detected as missing?
>
> The pattern in the line
> bigrams xs = take 2 xs : bigrams (tail xs)
> matches any list, even empty lists
>
Thank you.
Hugo F.
> Regards,
> Henk-Jan van Tuyl
>
>
------------------------------
Message: 7
Date: Tue, 18 Oct 2011 10:52:57 +0100
From: Hugo Ferreira <[email protected]>
Subject: Re: [Haskell-beginners] newbie: Monad, equivalent notation
using Control.Monad.guard
To: Brent Yorgey <[email protected]>
Cc: [email protected]
Message-ID: <[email protected]>
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Hello,
On 10/17/2011 05:22 PM, Brent Yorgey wrote:
> On Mon, Oct 17, 2011 at 04:18:05PM +0100, Hugo Ferreira wrote:
>> Hello,
>>
>> I came across the following code:
>>
>> ngrams'' :: Int -> [a] -> [[a]]
>> ngrams'' n l = do
>> t<- Data.List.tails l
>> l<- [take n t]
>> Control.Monad.guard (length l == n)
>> return l
>>
>> and tried to use the ">>=" operator in order
>> to figure out how Monads work. I came up with:
>>
>> test l =
>> (Data.List.tails l)
>> >>= (\t -> [take 2 t])
>> >>= (\l -> if (length l == 2) then [l] else [])
>>
>> Questions:
>> 1. How can I use Control.Monad.guard directly in "test l"
>
> test l =
> (Data.List.tails l)
> >>= \t -> [take 2 t]
> >>= \l -> Control.Monad.guard (length l == 2)
> >> return l
>
> The rule is that
>
> x<- foo
>
> desugars to
>
> foo>>= \x -> ...
>
> and
>
> blah
>
> desugars to
>
> blah>> ...
>
Ok, I was not aware of the >>.
> One thing that might have been tripping you up is your extra
> parentheses around the lambda expressions. If you have
>
> >>= (\l -> ...)
> >> foo...
>
> the l does not scope over foo... so you cannot mention it. Instead
> what you want is
>
> >>= \l -> ...
> >> foo...
>
> so the lambda expression is actually \l -> ...>> foo..., that is,
> it includes *everything* after the \l -> ... and not just the stuff on
> that line.
>
Hmmm. Still cannot wrap my mind around this B-(.
[[1],[2],[3]] >>= \l -> func1 l >>= \m -> func2 m
\l will hold each of the 3 elements of initial list
these are concatenated with the results of func1
results in a new list
\m will have each element in the new list
these are concatenated with the results of func2
results in a last list
is equal to ?
(([[1],[2],[3]] >>= \l -> func1 l) >>= \m -> func2 m)
Hmmm.. going to lookup more info on this.
>> 2. Related issue: how can create a List monad so that I
>> can input "l" argument of "test l" directly?
>
> I don't understand this question. Can you give an example of what you
> are trying to do?
>
Weird. I was trying to execute:
test1' [[1,2,3],[2,3],[3]]
in a version that does not use Data.List.tails
but could not. Now it works. Must have done something
wrong.
Hugo F.
> -Brent
>
> _______________________________________________
> Beginners mailing list
> [email protected]
> http://www.haskell.org/mailman/listinfo/beginners
>
------------------------------
_______________________________________________
Beginners mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/beginners
End of Beginners Digest, Vol 40, Issue 26
*****************************************