Keean Schupke k.schupke at imperial.ac.uk
Thu Oct 28 05:16:35 EDT 2004

```erm, yes you're right - don't know why that is - seems a fairly
arbitrary decision to me... perhaps someone else knows a good
reason why normal function definiton is not allowed?

Stijn De Saeger wrote:

>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
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>
>>

```