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. newbie: Monad, equivalent notation using Control.Monad.guard
(Hugo Ferreira)
2. Non exhaustive pattern match not flagged? (Hugo Ferreira)
3. Re: Non exhaustive pattern match not flagged? (Henk-Jan van Tuyl)
4. Re: newbie: Monad, equivalent notation using
Control.Monad.guard (Brent Yorgey)
5. creating a relational tuple type (AM)
6. GHC as a library error. (Paulo Pocinho)
7. Fwd: parser error in pattern (kolli kolli)
8. Re: Fwd: parser error in pattern (Michael Xavier)
9. Re: creating a relational tuple type (Stephen Tetley)
10. Re: [Haskell-cafe] parser error in pattern (kolli kolli)
----------------------------------------------------------------------
Message: 1
Date: Mon, 17 Oct 2011 16:18:05 +0100
From: Hugo Ferreira <[email protected]>
Subject: [Haskell-beginners] newbie: Monad, equivalent notation using
Control.Monad.guard
To: [email protected]
Message-ID: <[email protected]>
Content-Type: text/plain; charset=ISO-8859-15; format=flowed
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"
2. Related issue: how can create a List monad so that I
can input "l" argument of "test l" directly?
TIA,
Hugo F.
------------------------------
Message: 2
Date: Mon, 17 Oct 2011 16:39:49 +0100
From: Hugo Ferreira <[email protected]>
Subject: [Haskell-beginners] Non exhaustive pattern match not flagged?
To: [email protected]
Message-ID: <[email protected]>
Content-Type: text/plain; charset=ISO-8859-15; format=flowed
Hello,
I am using the GHC compiler with the -W flag.
When I compile:
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?
TIA,
Hugo F.
------------------------------
Message: 3
Date: Mon, 17 Oct 2011 17:53:38 +0200
From: "Henk-Jan van Tuyl" <[email protected]>
Subject: Re: [Haskell-beginners] Non exhaustive pattern match not
flagged?
To: [email protected], "Hugo Ferreira" <[email protected]>
Message-ID: <[email protected]>
Content-Type: text/plain; charset=iso-8859-15; format=flowed;
delsp=yes
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
Regards,
Henk-Jan van Tuyl
--
http://Van.Tuyl.eu/
http://members.chello.nl/hjgtuyl/tourdemonad.html
--
------------------------------
Message: 4
Date: Mon, 17 Oct 2011 12:22:21 -0400
From: Brent Yorgey <[email protected]>
Subject: Re: [Haskell-beginners] newbie: Monad, equivalent notation
using Control.Monad.guard
To: [email protected]
Message-ID: <[email protected]>
Content-Type: text/plain; charset=us-ascii
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 >> ...
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.
> 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?
-Brent
------------------------------
Message: 5
Date: Mon, 17 Oct 2011 15:51:07 -0400
From: AM <[email protected]>
Subject: [Haskell-beginners] creating a relational tuple type
To: [email protected]
Message-ID:
<[email protected]>
Content-Type: text/plain; charset=us-ascii
Hello,
As an effort to learn Haskell, I am creating a relational algebra engine. To
this end, I have been looking at how haskelldb handles its mapping layer. I
found this:
data RecNil = RecNil deriving (Eq, Ord)
data RecCons f a b = RecCons a b deriving (Eq, Ord)
It seems to me that the type of "b" is too loose, no? I would like "b" to be of
the type RecCons or RecNil as well. The looseness of b prevents me from writing
functions like this:
data RecCons a b = RecCons a b |
RecNil
deriving (Eq, Ord)
tupleLength :: RecCons a b -> Int
tupleLength RecNil = 0
tupleLength (RecCons x xs) = 1 + tupleLength xs -- xs really should be of type
RecCons
What I would like is a list of arbitrary values rolled into a type such as
(RecCons Int (RecCons String RecNil)).
I tried a RecCons with existential quantification, but I ended up with a
completely loosely-typed list. I would like Haskell's type engine to catch
invalid comparisons between record tuples of disparate types. It seems that
HDBRec works around this using a variety of typeclasses, but I don't really
understand why.
Thanks for any advice.
Cheers,
M
------------------------------
Message: 6
Date: Mon, 17 Oct 2011 21:55:06 +0100
From: Paulo Pocinho <[email protected]>
Subject: [Haskell-beginners] GHC as a library error.
To: [email protected]
Message-ID:
<cak4i1qspo1v0emwdt8zsz_abdbiorpbuwvs7-zon2i1nj1n...@mail.gmail.com>
Content-Type: text/plain; charset=UTF-8
I'm trying GHC as a library, as documented in:
http://www.haskell.org/haskellwiki/GHC/As_a_library
http://www.haskell.org/ghc/docs/7.2.1/html/users_guide/ghc-as-a-library.html
However, this code:
import GHC
import GHC.Paths ( libdir )
import DynFlags ( defaultDynFlags )
main =
defaultErrorHandler defaultDynFlags $ do
runGhc (Just libdir) $ do
dflags <- getSessionDynFlags
setSessionDynFlags dflags
target <- guessTarget "test_main.hs" Nothing
setTargets [target]
load LoadAllTargets
Produces:
Couldn't match expected type `Severity'
with actual type `DynFlags.Settings'
Expected type: DynFlags.LogAction
Actual type: DynFlags.Settings -> DynFlags
In the first argument of `defaultErrorHandler', namely
`defaultDynFlags'
In the expression: defaultErrorHandler defaultDynFlags
How can I fix it?
------------------------------
Message: 7
Date: Mon, 17 Oct 2011 15:43:47 -0600
From: kolli kolli <[email protected]>
Subject: [Haskell-beginners] Fwd: parser error in pattern
To: [email protected], [email protected]
Message-ID:
<cae7d9k6bshpyil6qdewqzh1hf8f9xelrrrwvgyjfkfqjrv5...@mail.gmail.com>
Content-Type: text/plain; charset="iso-8859-1"
---------- Forwarded message ----------
From: kolli kolli <[email protected]>
Date: Mon, Oct 17, 2011 at 3:43 PM
Subject: parser error in pattern
To: [email protected]
hey can anyone tell me what is parser error in pattern??Plz help me out
-------------- next part --------------
An HTML attachment was scrubbed...
URL:
<http://www.haskell.org/pipermail/beginners/attachments/20111017/c910d1b9/attachment-0001.htm>
------------------------------
Message: 8
Date: Mon, 17 Oct 2011 14:47:00 -0700
From: Michael Xavier <[email protected]>
Subject: Re: [Haskell-beginners] Fwd: parser error in pattern
To: kolli kolli <[email protected]>
Cc: [email protected], [email protected]
Message-ID:
<CANk=zmH_MBX0exL0i76U=zn0xvzepfqq+2dv+0z74jq+c_e...@mail.gmail.com>
Content-Type: text/plain; charset="iso-8859-1"
You need to provide a code sample in order for someone to help you out.
Also, for small issues like this, it is sometimes best to go to #haskell on
irc.freenode.net and ask there.
On Mon, Oct 17, 2011 at 2:43 PM, kolli kolli <[email protected]> wrote:
>
>
> ---------- Forwarded message ----------
> From: kolli kolli <[email protected]>
> Date: Mon, Oct 17, 2011 at 3:43 PM
> Subject: parser error in pattern
> To: [email protected]
>
>
> hey can anyone tell me what is parser error in pattern??Plz help me out
>
>
> _______________________________________________
> Beginners mailing list
> [email protected]
> http://www.haskell.org/mailman/listinfo/beginners
>
>
--
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/cb785352/attachment-0001.htm>
------------------------------
Message: 9
Date: Mon, 17 Oct 2011 23:07:49 +0100
From: Stephen Tetley <[email protected]>
Subject: Re: [Haskell-beginners] creating a relational tuple type
Cc: [email protected]
Message-ID:
<CAB2TPRB6Swv5feg9v9tSPhfx_q37xft=jDOXpy=50sH76=g...@mail.gmail.com>
Content-Type: text/plain; charset=ISO-8859-1
The type classes in Haskell DB are to allow manipulations on type level lists.
You probably want to read the paper "Strongly typed heterogeneous
collections" by Oleg Kiselyov, Ralf L?mmel, and Keean Schupke to get a
sense of Haskell DB:
http://homepages.cwi.nl/~ralf/HList/
To learn Haskell, writing a "less typed" relational algebra engine
would be significantly easier. The early sections of the HList give
simpler heterogeneous lists that don't use type level programming (but
aren't as well typed).
------------------------------
Message: 10
Date: Mon, 17 Oct 2011 16:08:42 -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:
<cae7d9k6y4fygootgvdddkrngiryzr9uglqjkxppsb8v4rys...@mail.gmail.com>
Content-Type: text/plain; charset="iso-8859-1"
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
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
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL:
<http://www.haskell.org/pipermail/beginners/attachments/20111017/6ba75628/attachment.htm>
------------------------------
_______________________________________________
Beginners mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/beginners
End of Beginners Digest, Vol 40, Issue 25
*****************************************