[Haskell-cafe] Constraints at construction

Mitchell, Neil neil.mitchell.2 at credit-suisse.com
Thu Oct 9 09:05:27 EDT 2008


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