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: Book on formal methods? (Wojciech Jedynak)
2. Re: functional parser type error (Brent Yorgey)
3. Re: computing multiple attributes in Happy (damodar kulkarni)
4. Re: functional parser type error (Stephen Tetley)
5. Understanding yampas par and dpSwitch (Nathan H?sken)
----------------------------------------------------------------------
Message: 1
Date: Wed, 4 Apr 2012 18:48:15 +0200
From: Wojciech Jedynak <[email protected]>
Subject: Re: [Haskell-beginners] Book on formal methods?
To: C Gosch <[email protected]>
Cc: [email protected]
Message-ID:
<caotugqs5ckmxa79t_tgqmfwehqahdlo5vy7mmfsp4ci2bxa...@mail.gmail.com>
Content-Type: text/plain; charset=ISO-8859-1
2012/4/4 C Gosch <[email protected]>:
> Hi there,
>
> I suspect that some here may be experts in formal methods. Can you
> recommend a book on formal methods
> (for software engineering)? I do not know about formal methods so far,
> I can take some theory, and in a book I would like to have
> some examples and practical issues explained as well as theoretical stuff.
> Any recommendations?
I'm not sure if that's what you wanted, but you may enjoy working
through the Software Foundations online textbook
(http://www.cis.upenn.edu/~bcpierce/sf/).
It's has a lot of hands on exercises in the Coq proof assistant (which
it introduced from scratch).
Greetings,
Wojciech
------------------------------
Message: 2
Date: Wed, 4 Apr 2012 13:31:13 -0400
From: Brent Yorgey <[email protected]>
Subject: Re: [Haskell-beginners] functional parser type error
To: [email protected]
Message-ID: <[email protected]>
Content-Type: text/plain; charset=utf-8
On Wed, Apr 04, 2012 at 10:54:45AM +0100, felipe zapata wrote:
> Hi,
> The parser is defined
>
> *type Parser a = String ? [(a, String)]*
> *
> *
> But for me it is not pretty clear, why i need to
> make Parser a newtype instead of working
> with this one.
In order to use do-notation, Parser has to be an instance of Monad.
However, ((->) String) is already an instance of Monad, and it's not
the instance you want for Parser. There cannot be two instances for
the same type, so you must wrap it in a newtype in order to make a
different instance.
The other option is to just implement your own operators
(>==) :: Parser a -> (a -> Parser b) -> Parser b
returnP :: a -> Parser a
and use those directly, though then you cannot use do-notation.
-Brent
------------------------------
Message: 3
Date: Thu, 5 Apr 2012 00:11:06 +0530
From: damodar kulkarni <[email protected]>
Subject: Re: [Haskell-beginners] computing multiple attributes in
Happy
To: kak dod <[email protected]>
Cc: [email protected]
Message-ID:
<cad5hsypyvhayu5zaqnzj1ompqxku_+15c_o62gdb-f3qgkk...@mail.gmail.com>
Content-Type: text/plain; charset="iso-8859-1"
Hello,
See the following code. It allows you to compute multiple attributes and
access them too. I don't know a better and simpler method than this to
serve this purpose. Waiting for inputs from experts.
---------------------------------
{
module BitsParser (parse) where
test = parse "1011\n"
-- how to write the list attribute to a file here?
test2 = writeFile "testOutFile" (show $ snd test)
data Dirs = MyLeft | MyRight deriving Show
fun a b = a^b
}
%tokentype { Char }
%token minus { '-' }
%token plus { '+' }
%token one { '1' }
%token zero { '0' }
%token newline { '\n' }
%attributetype { Attrs }
%attribute value { (Integer, [Dirs]) }
%attribute pos { Int }
%attribute list { [Dirs] }
%name parse start
%%
start
: num newline { $$ = $1 }
num
: bits { $$ = $1 ; $1.pos = 0 ; $1.list = [] }
| plus bits { $$ = $2 ; $2.pos = 0 ; $2.list = [] }
| minus bits { $$ = (negate (fst $2), snd $2) ; $2.pos = 0 ; $2.list =
[] }
bits
: bit { $$ = $1
; $1.pos = $$.pos ; $1.list = $$.list
}
| bits bit { $$ = myComputeAttrFun $1 $2; $$.list = $1.list ++ $2.list
; $1.pos = $$.pos + 1
; $2.pos = $$.pos
}
bit
: zero { $$ = (0, [MyLeft]) ; $$.list = [MyLeft] }
| one { $$ = (fun 2 ($$.pos), [MyRight]) ; $$.list = [MyRight] }
{
myComputeAttrFun a b = (c, d)
where
c = fst a + fst b
d = snd a ++ snd b
happyError = error "parse error"
}
---------------------------------
--
Thanks and regards,
-Damodar Kulkarni
-------------- next part --------------
An HTML attachment was scrubbed...
URL:
<http://www.haskell.org/pipermail/beginners/attachments/20120405/d20abbb3/attachment-0001.htm>
------------------------------
Message: 4
Date: Thu, 5 Apr 2012 07:25:58 +0100
From: Stephen Tetley <[email protected]>
Subject: Re: [Haskell-beginners] functional parser type error
Cc: [email protected]
Message-ID:
<cab2tprbkk8dw_epex47zvx9yhssyjv4qypj-ukmjp9r_9fa...@mail.gmail.com>
Content-Type: text/plain; charset=ISO-8859-1
There is working code to accompany the book on Graham Hutton's website
that wraps Parser as a newtype.
http://www.cs.nott.ac.uk/~gmh/book.html
http://www.cs.nott.ac.uk/~gmh/Parsing.lhs
Graham makes a brief comment about the difference at the end of the
parsing chapter.
On 4 April 2012 18:31, Brent Yorgey <[email protected]> wrote:
> In order to use do-notation, Parser has to be an instance of Monad.
> However, ((->) String) is already an instance of Monad, and it's not
> the instance you want for Parser. ?There cannot be two instances for
> the same type, so you must wrap it in a newtype in order to make a
> different instance.
------------------------------
Message: 5
Date: Thu, 05 Apr 2012 11:09:31 +0200
From: Nathan H?sken <[email protected]>
Subject: [Haskell-beginners] Understanding yampas par and dpSwitch
To: [email protected]
Message-ID: <[email protected]>
Content-Type: text/plain; charset=ISO-8859-1
Hi,
I am currently working my way through the paper "Function Reactive
Programming Continued", which is about yampa.
On page 55 (page 5 in the pdf) "par" with the signature:
par :: Functor col => (forall sf . (a -> col sf -> col (b, sf)))
-> col (SF b c)
-> SF a (col c)
is introduced.
So the resulting signal function (of type SF a (col c)) takes its input
(of type a) and puts it into the first argument of par together with its
second argument (col (SF b c)) to receive a collection of input/signal
pairs (col (b, sf)). Correct?
My questions:
1. Shouldn't be the signature of the first argument be:
a -> col (SF b c) -> col (b, (SF b c))
I mean it receives the second argument of par as its second argument?!?
2. When the collection of input signal/pairs is received (col (b, sf)),
the b is applied to sf, correct? Why not directly return the result of
this application?
I hope I was able to state clear enough questions ...
Thanks!
Nathan
------------------------------
_______________________________________________
Beginners mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/beginners
End of Beginners Digest, Vol 46, Issue 5
****************************************