[Haskell-cafe] Newbie Question on type constructors

Jon Fairbairn Jon.Fairbairn at cl.cam.ac.uk
Mon Nov 1 15:51:11 EST 2004


On 2004-11-01 at 12:30PST "Brian Beckman" wrote:
> Most interesting discussion -- in reading it, I realized that I had a
> 'hidden agenda' in asking my question (hidden even from myself), and
> that is: can I put interesting functionality, like precondition checks &
> data validation, in data constructors? 

No, though one could make a case that you should be able to.

> I suspect not, and that's why I tend to write something
> like the following:
> 
>   data Shape = Circle Float
>              | Square Float
>     deriving (Eq, Show)
> 
>   circle :: Float -> Shape
>   circle x = if (x <= 0) then error "Bad radius!" else Circle x
> 
> That's fine,

Yup.

> but I don't know how to prevent users from calling "Circle"
> directly 

Put the data declaration in a module, export the type, but
not the constructor you want to hide:

> module Shape (Shape(Square), circle) where

-- 
Jón Fairbairn                                 Jon.Fairbairn at cl.cam.ac.uk




More information about the Haskell-Cafe mailing list