
You can't do that within the data type declaration.
In order to add such constraints you should define "constructor functions"
and apply the validation there, i.e.:
newSecondsInterval :: Float -> Maybe Interval
newSecondsInterval n
| n >= 1 = Just $ Seconds n
| otherwise = Nothing
Note that the "Maybe" type is only a way to handle the case where the
supplied value is invalid. Also, in order to provide encapsulation and
ensure no one is going to create a new "Interval" by using "Seconds" and
"MicroSeconds", you should hide these value constructors in the export list
of your module.
On Tue, Sep 2, 2014 at 4:32 PM, Dmitriy Matrosov
Hi.
I have a type
data Interval = Seconds Float | MicroSeconds Int
The Float field of data constructor Seconds should be >= 1, and Int field of constructor MicroSeconds should be in the range from 0 to 1000000.
How can i write this constraints so they're checked at compile time, not at runtime?
-- Dmitriy Matrosov _______________________________________________ Beginners mailing list Beginners@haskell.org http://www.haskell.org/mailman/listinfo/beginners
-- alexandre lucchesi *Perfection is achieved, not when there is nothing more to add, but when there is nothing left to take away!*