[Haskell-cafe] Constraints at construction

Jake McArthur jake at pikewerks.com
Sat Oct 11 16:00:19 EDT 2008

On Oct 11, 2008, at 2:54 PM, Bit Connor wrote:

> Smart constructors are nice but if your module doesn't also export the
> regular constructor then you can't pattern match against it.
> It would be cool if there was a way to export constructors from a
> module, but only for use in pattern matching and not constructing new
> values.

I suppose you could make a new data type to pattern match against. For  
example, say you have

     data Foo A B = <hidden constructors>
     foo :: A -> B -> Foo A B -- smart constructor

You could introduce and export

     data FooView = Foo A B | <other possible deconstructions>
     fooView :: Foo A B -> FooView A B

You could even redefine the smart constructor as

     foo : FooView A B -> Foo A B

... if you wanted.

- Jake

More information about the Haskell-Cafe mailing list