
On 12 December 2012 21:57, Navid Hallajian
Hello,
I'm a beginner in Haskell, so forgive me if this is a basic question, but I'd like to know if it's possible to have a predicate as part of a data type, so that when the data type is created, it can only be done if it satisfies the predicate else a type error is thrown.
For instance, a matrix with integer elements could be modelled as [[Int]], given the restrictions that
it must have at least one column and one row (so there must be at least one list), and every list must have the same length
so that when a matrix is created, the type system wont allow it if the predicates aren't met.
Write a custom constructor function that returns a Maybe: newtype Matrix = Matrix [[Int]] makeMatrix :: [[Int]] -> Maybe Matrix makeMatrix [] = Nothing -- No columns makeMatrix [[]] = Nothing -- Has a column but no rows ... It is possible with smarter types to encode various predicates into the actual type, but for your purposes they probably aren't required.
Thanks,
Navid
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
-- Ivan Lazar Miljenovic Ivan.Miljenovic@gmail.com http://IvanMiljenovic.wordpress.com