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. Representing a Set using a boolean function (Robert Weisser)
2. Re: Representing a Set using a boolean function
(Felipe Almeida Lessa)
3. Re: Representing a Set using a boolean function (Brent Yorgey)
4. Re: basic data types (Peter Hall)
5. Audio packages. (Sourabh)
6. Re: Audio packages. (Henk-Jan van Tuyl)
----------------------------------------------------------------------
Message: 1
Date: Fri, 30 Dec 2011 17:53:26 -0500
From: "Robert Weisser" <[email protected]>
Subject: [Haskell-beginners] Representing a Set using a boolean
function
To: [email protected]
Message-ID: <[email protected]>
Content-Type: text/plain; charset="utf-8"
I am working through Thompson's "Haskell The Craft of Functional
programming", 2nd edition. I am not doing this as part of a class.
It is just for my own enjoyment.
I am having a problem with Exercise 16.38. Here is the exercise:
The abstract data type Set a can be represented in a number of
different ways. Alternatives include arbitrary lists (rather
than ordered lists without repetitions) and Boolean valued functions,
that is elements of the type a -> Bool. Give implementations of
the type using these two representations.
?
Note: the book previously showed a representation of Set a using ordered
lists without repetitions.
I had no problem representing Set a with arbitrary lists. My problem came
when I tried to represent Set a with boolean functions. My first question
was this: which of the following was Thompson asking for?
newtype Set a = Set (a -> Bool) (version 1)
?
newtype Set a = Set [a -> Bool] (version 2)
I decided on version 1. Version 2 did not seem to have any advantage over
version 1. Also, version 1 resembled something earlier in the book (an
associative list implemented as a boolean function). I had no trouble with
functions in the Module export list (see code below) which did not need
to know the contents of the set. However, when I got to eqSet, I was
stumped. I don't see how any function can see inside the set. I don't know
enough Haskell to be certain, but it looks impossible to me. Is there
something I am missing?
?
> module Set (
> Set,
> empty, -- Set a
> sing, -- a -> Set a
> memSet, -- Ord a => Set a -> a -> Bool
> union, -- Ord a => Set a -> Set a -> Set a
> inter, -- Ord a => Set a -> Set a -> Set a
> diff, -- Ord a => Set a -> Set a -> Set a
> symmDiff, -- Ord a => Set a -> Set a -> Set a
> eqSet, -- Eq a => Set a -> Set a -> Bool
> subSet, -- Ord a => Set a -> Set a -> Bool
> makeSet, -- Ord a => [a] -> Set a
> mapSet, -- Ord b => (a -> b) -> Set a -> Set b
> filterSet, -- (a -> Bool) -> Set a -> Set a
> foldSet, -- (a -> a -> a) -> a -> Set a -> a
> showSet, -- (a -> String) -> Set a -> String
> card) -- Set a -> Int
> where
>
> import Data.List hiding (union)
>
> instance Eq a => Eq (Set a) where
> (==) = eqSet
>
> instance Ord a => Ord (Set a) where
> (<=) = leqSet
>
> newtype Set a = Set (a -> Bool)
>
> empty :: Set a
> empty = Set $ \_ -> False
>
> sing :: Ord a => a -> Set a
> sing y = Set $ \x -> x == y
>
> memSet :: Ord a => Set a -> a -> Bool
> memSet (Set f) x = f x
>
> union :: Ord a => Set a -> Set a -> Set a
> union s1 s2 = Set $ \x -> memSet s1 x || memSet s2 x
>
> inter :: Ord a => Set a -> Set a -> Set a
> inter s1 s2 = Set $ \x -> memSet s1 x && memSet s2 x
>
> diff :: Ord a => Set a -> Set a -> Set a
> diff s1 s2 = Set $ \x -> memSet s1 x && not (memSet s2 x)
>
> symmDiff :: Ord a => Set a -> Set a -> Set a
> symmDiff s1 s2 = union (diff s1 s2) (diff s2 s1)
>
> -- Not exported:
> contents :: Ord a => Set a -> [a]
> contents (Set f) = undefined
>
> eqSet :: Eq a => Set a -> Set a -> Bool
> eqSet (Set xs) (Set ys) = undefined
>
> -- Not exported:
> leqSet :: Ord a => Set a -> Set a -> Bool
> leqSet (Set xs) (Set ys) = undefined
>
> subSet :: Ord a => Set a -> Set a -> Bool
> subSet (Set xs) (Set ys) = undefined
>
> makeSet :: Ord a => [a] -> Set a
> makeSet xs = foldl addElem empty xs
>
> -- Not exported:
> addElem :: Ord a => Set a -> a -> Set a
> addElem (Set f) y = Set g
> where
> g x = if x == y then True
> else f x
>
> mapSet :: Ord b => (a -> b) -> Set a -> Set b
> mapSet f (Set xs) = undefined
>
> filterSet :: (a -> Bool) -> Set a -> Set a
> filterSet p (Set xs) = undefined
>
> foldSet :: (a -> a -> a) -> a -> Set a -> a
> foldSet f x (Set xs) = undefined
>
> showSet :: (a -> String) -> Set a -> String
> showSet f (Set xs) = undefined
>
> card :: Set a -> Int
> card (Set xs) = undefined
For testing, I used the following. I checked individual
values for membership in the union, intersection, etc.
> list1 = [1..4] :: [Int]
> list2 = [3..6] :: [Int]
>
> set1 = makeSet list1
> set2 = makeSet list2
>
> setUnion = union set1 set2
> setInter = inter set1 set2
> setDiff = diff set1 set2
> setSymmDiff = symmDiff set1 set2
?
?
Robert Weisser
?
------------------------------
Message: 2
Date: Fri, 30 Dec 2011 21:02:34 -0200
From: Felipe Almeida Lessa <[email protected]>
Subject: Re: [Haskell-beginners] Representing a Set using a boolean
function
To: Robert Weisser <[email protected]>
Cc: [email protected]
Message-ID:
<CANd=OGEMzQuDMW5_o77wP0QCP=NPp=yp73fBxYzKMTP=5rt...@mail.gmail.com>
Content-Type: text/plain; charset=UTF-8
On Fri, Dec 30, 2011 at 8:53 PM, Robert Weisser <[email protected]> wrote:
> ?newtype Set a = Set (a -> Bool) (version 1)
This one, certainly.
> However, when I got to eqSet, I was
> ?stumped. I don't see how any function can see inside the set. I don't know
> ?enough Haskell to be certain, but it looks impossible to me. Is there
> ?something I am missing?
You really can't look inside the function to decide if they are equal.
The only way of doing it would be enumerating all possible items that
could be in a set and checking them. Something like
eqSet s1 s2 = and [memSet s1 x == memSet s2 x | x <- allValues]
class AllValues a where
allValues :: [a]
instance AllValues Bool where
allValues = [True, False]
instance AllValues Char where
allValues = ['\0'..]
instance AllValues Int where
allValues = [0..] ++ [-1,-2..]
and so on. Note that usually this is a really bad idea and perhaps it
would be better to not implement eqSet at all.
HTH,
--
Felipe.
------------------------------
Message: 3
Date: Fri, 30 Dec 2011 21:23:14 -0500
From: Brent Yorgey <[email protected]>
Subject: Re: [Haskell-beginners] Representing a Set using a boolean
function
To: [email protected]
Message-ID: <[email protected]>
Content-Type: text/plain; charset=us-ascii
On Fri, Dec 30, 2011 at 05:53:26PM -0500, Robert Weisser wrote:
> stumped. I don't see how any function can see inside the set. I don't know
> enough Haskell to be certain, but it looks impossible to me. Is there
> something I am missing?
Nope, you're absolutely right. This is one of the big differences
between an "intensional" representation of a set (such as a list)
which lets you inspect the set's internal structure, and an
"extensional" representation (like a -> Bool) which only lets you
inspect the set's "behavior". You may enjoy trying to think of other
differences (hint: think about efficiency).
-Brent
------------------------------
Message: 4
Date: Sat, 31 Dec 2011 03:55:00 +0000
From: Peter Hall <[email protected]>
Subject: Re: [Haskell-beginners] basic data types
To: Stanis?aw Findeisen <[email protected]>
Cc: [email protected]
Message-ID:
<CAA6hAk6t63LVgNHqza1RLnaSQde9C6G+0VraCN0iY=o3v3t...@mail.gmail.com>
Content-Type: text/plain; charset=UTF-8
A reasonable analogy (though it's not nearly the same thing) for
Haskell classes is Java interfaces. e.g. in Java, Boolean is a class
that implements Serializable and Comparable, while Haskell's Bool type
is an instance of all those classes you listed. In Haskell, the
equivalent of Java's 'class Boolean implements Comparable<Boolean>
...' is 'instance Eq Bool where ... '. In Java you declare the
interfaces that a class implements when the class is declared. In
Haskell, you can add class instances to any type later, not just in
the module that declared the type.
Peter
2011/12/30 Stanis?aw Findeisen <[email protected]>:
> Hi
>
> What are those basic data type instances? For example here:
> http://www.haskell.org/ghc/docs/latest/html/libraries/base/Prelude.html#t:Bool
> we have:
>
> Instances
>
> Bounded Bool
> Enum Bool
> Eq Bool
> Data Bool
> Ord Bool
> Read Bool
> Show Bool
> Ix Bool
> Typeable Bool
> Generic Bool
> Storable Bool
>
> What is the difference between, e.g., Bounded Bool and Enum Bool?
>
> --
> This e-mail address is invalid, see:
> http://people.eisenbits.com/~stf/public-email-note.html .
>
> OpenPGP: E3D9 C030 88F5 D254 434C ?6683 17DD 22A0 8A3B 5CC0
>
> _______________________________________________
> Beginners mailing list
> [email protected]
> http://www.haskell.org/mailman/listinfo/beginners
------------------------------
Message: 5
Date: Sat, 31 Dec 2011 00:15:54 -0800
From: Sourabh <[email protected]>
Subject: [Haskell-beginners] Audio packages.
To: [email protected]
Message-ID:
<CAK0HM3=WU3s6FTPhhA87JycB9y+=ypnwduxa-jxmkcgkflm...@mail.gmail.com>
Content-Type: text/plain; charset="iso-8859-1"
Hello, I'm a Haskell beginner and am working on my first *serious* haskell
project. After going through a few books, and working on the exercises in
the books, I finally started writing a small 2D game in Haskell. I figured
this would give me lots of exposure to Haskell, and also on how graphics,
keyboard, sound, etc are done.
Also, I'm working on windows, so unfortunately building the correct
libraries has been a bit of a pain. In fact, my question pertains to this.
I am currently at the stage where I can get various events to happen
correctly in the game, but there is no sound. I started looking at various
audio related packages earlier today, but I can't seem to find any
documentation on any packages. To add to my woes, I just can't, for the
life of me, get any packages to install correctly on windows. So far I have
tried OpenAL, SDL-mixer, PortAudio on windows, and none of them seem to
work.
Cabal install outright fails and asks me to go the MinGW/msys route. When I
try to go through this route (which worked successfully for me for
graphics), I still can't get any libraries to build. The various errors I
have encountered range from configure/build failing, to dependencies not
installing correctly. Looking at the various hits on google, it seems that
I am not alone in this.
I finally managed to get SDL to install (but not SDL-mixer). Even though
SDL has an Audio component to it, the lack of documentation on the API has
left me with no way to figure out how to actually use this...?
Link that worked for me:
http://www.animal-machine.com/blog/2010/04/a-haskell-adventure-in-windows/
Finally, I have started getting this error every time I do a cabal install
now:
Setup.hs:1:8:
Could not find module `Distribution.Simple':
Use -v to see a list of the files searched for.
Have I finally done something terrific and blown everything apart?
Sadly, instead of spending time writing Haskell code, I find myself
spending a lot of time getting libraries to install and work on Windows. Is
this common, or am I doing something wrong?
At this point I would very much like advice on a couple of things:
1. Does anyone know any good Audio packages, that would work on windows,
along with some examples and documentation of the API?
2. What should I do to get cabal to start installing stuff again?
I apologize if I sound a bit frustrated, because I guess I am. :)
Thanks for any advice, and have a happy new year!
-------------- next part --------------
An HTML attachment was scrubbed...
URL:
<http://www.haskell.org/pipermail/beginners/attachments/20111231/a6ed53a6/attachment-0001.htm>
------------------------------
Message: 6
Date: Sat, 31 Dec 2011 11:10:15 +0100
From: "Henk-Jan van Tuyl" <[email protected]>
Subject: Re: [Haskell-beginners] Audio packages.
To: [email protected], Sourabh <[email protected]>
Message-ID: <[email protected]>
Content-Type: text/plain; charset=iso-8859-15; format=flowed;
delsp=yes
On Sat, 31 Dec 2011 09:15:54 +0100, Sourabh <[email protected]>
wrote:
:
:
> At this point I would very much like advice on a couple of things:
> 1. Does anyone know any good Audio packages, that would work on windows,
> along with some examples and documentation of the API?
I use wxHaskell for game development, it has functions built-in to play
sound files.
Regards,
Henk-Jan van Tuyl
--
http://Van.Tuyl.eu/
http://members.chello.nl/hjgtuyl/tourdemonad.html
Haskell programming
--
------------------------------
_______________________________________________
Beginners mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/beginners
End of Beginners Digest, Vol 42, Issue 35
*****************************************