# [Haskell-cafe] Set of reals...?

Stijn De Saeger stijndesaeger at gmail.com
Wed Oct 27 22:51:21 EDT 2004

```aha, I see.
Seems like i still have a long way to go with functional programming.

final question: i tried to test the code below, but it seems GHCi will
only take the `isin` functions when they are defined in lambda
notation (like isin = (\x -> ...)).
Did you run this code too, or were you just sketching me the rough idea?

Cheers for all the replies by the way, i learnt a great deal here.
stijn.

On Wed, 27 Oct 2004 14:09:36 +0100, Keean Schupke
<k.schupke at imperial.ac.uk> wrote:
> Well, its functional of course:
>
>     union :: Interval -> Interval -> Interval
>     union i j = Interval {
>        isin x = isin i x || isin j x
>     }
>
>     intersection :: Interval -> Interval -> Interval
>     intersection i j = Interval {
>        isin x = isin i x && isin j x
>     }
>
>     Keean.
>
>
>
>
> Stijn De Saeger wrote:
>
> >That seems like a very clean way to define the sets indeed, but how
> >would you go about implementing operations like intersection,
> >complement etc... on those structures? define some sort of algebra
> >over the functions? or extend such sets by adding elements? hm...
> >sounds interesting,.
> >
> >thanks,
> >stijn.
> >
> >
> >On Wed, 27 Oct 2004 11:52:54 +0100, Keean Schupke
> ><k.schupke at imperial.ac.uk> wrote:
> >
> >
> >>I think someone else mentioned using functions earlier,
> >>rather than a datatype why not define:
> >>
> >>    data Interval = Interval { isin :: Float -> Bool }
> >>
> >>Then each range becomes a function definition, for example:
> >>
> >>    myInterval = Interval {
> >>       isin r
> >>          | r == 0.6 = True
> >>          | r > 0.7 && r < 1.0 = True
> >>          | otherwise = False
> >>       }
> >>
> >>Then you can test with:
> >>
> >>    (isin myInterval 0.6)
> >>
> >>Keean
> >>
> >>
> >>
> >>
>
>
```