[Haskell-cafe] Constraints at construction

Iain Barnett iainspeed at gmail.com
Thu Oct 9 09:14:55 EDT 2008


Thankyou, this is exactly what I was looking for.

Iain


On 9 Oct 2008, at 2:05 pm, Mitchell, Neil wrote:

> Hi Iain,
>
> The wiki page has quite a nice article:
> http://www.haskell.org/haskellwiki/Smart_constructors
>
> Thanks
>
> Neil
>
>> -----Original Message-----
>> From: haskell-cafe-bounces at haskell.org
>> [mailto:haskell-cafe-bounces at haskell.org] On Behalf Of Iain Barnett
>> Sent: 09 October 2008 2:03 pm
>> To: haskell-cafe at haskell.org
>> Subject: [Haskell-cafe] Constraints at construction
>>
>> If I were to create an object in C#, for instance, I could
>> add code to the constructor that might limit the type further e.g.
>>
>>
>> public class Car
>> {
>> 	string model;
>> 	int wheels;
>>
>> 	public Car ( string model, int no_of_wheels )
>> 	{
>> 		if (  no_of_wheels <= 2 ) {
>> 			throw new Exception( "a car must have
>> at least 3 wheels");
>> 		}
>> 		
>> 		this.model = model;
>> 		this.no_of_wheels = no_of_wheels;
>> 	}
>> }
>>
>> or I could specify all sorts of things, like the size of an
>> array could only be a certain length, or whatever. Similarly,
>> when creating a column with SQL I'd be able to specify
>> further constraints on the column than just it's type.
>>
>> I don't see how to do this with Haskell and the data keyword.
>> Is there a tutorial someone could point me to, or an
>> explanation of this? Or is it that I have to wrap the
>> creation in an accessor function that checks the inputs first?
>>
>> type Model = String
>> type Wheels = Int
>>
>> data Car = Car Model Wheels
>>
>> car_maker model wheels = if wheels <= 2 then error ...
>> 						else Car model wheels
>> 		
>> ?
>>
>> Most of my programming career (if you can call it that:) has
>> been primarily with C# and SQL, and perhaps this heady
>> mixture of OOP and hacked-functional is confusing me!
>>
>>
>> Iain
>>
>> _______________________________________________
>> Haskell-Cafe mailing list
>> Haskell-Cafe at haskell.org
>> http://www.haskell.org/mailman/listinfo/haskell-cafe
>>
>>
>
> ====================================================================== 
> ========
> Please access the attached hyperlink for an important electronic  
> communications disclaimer:
>
> http://www.credit-suisse.com/legal/en/disclaimer_email_ib.html
> ====================================================================== 
> ========
>



More information about the Haskell-Cafe mailing list