[Haskell-cafe] Predicates in data types
Ivan Lazar Miljenovic
ivan.miljenovic at gmail.com
Wed Dec 12 12:58:51 CET 2012
On 12 December 2012 21:57, Navid Hallajian <navidhg at gmail.com> wrote:
> 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 at haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-cafe
>
--
Ivan Lazar Miljenovic
Ivan.Miljenovic at gmail.com
http://IvanMiljenovic.wordpress.com
More information about the Haskell-Cafe
mailing list