[Haskell-beginners] abstype?

Alexander Dunlap alexander.dunlap at gmail.com
Mon Aug 15 07:52:11 CEST 2011


abstype is not currently a keyword in Haskell. To hide constructors
from client modules, use an explicit module export list, and don't
include the constructors in the list.

For example,

module MyModule ( Foo ) where

data Foo = Bar Int | Baz Float | Bat Double

will make Foo an abstract type, since Bar, Baz, and Bat are not exported.

Similarly,

module MyModule ( Foo ) where

data Foo = Foo Int

will also make Foo an abstract type, since Foo in the export list
refers to the type Foo, not the constructor Foo (which happens to have
the same name). To export Foo and its constructors, use Foo (..) in
the export list, or list the constructors explicitly: Foo ( Bar, Baz,
Bat ) for the first example, or Foo ( Foo ) for the second example.

Hope that helps.

Alexander

On 14 August 2011 22:06, Christopher Howard
<christopher.howard at frigidcode.com> wrote:
> In my older (1992) intro programming book, the author uses the keyword
> "abstype" instead of "data" inside of module code. From what I can gather,
> abstype is supposed to hide constructors. But I've never seen this keyword
> used in any modern tutorials I've gone through. Is "abstype" still a valid
> keyword? Is is still relevant?
>
> --
> frigidcode.com
> theologia.indicium.us
>
> _______________________________________________
> Beginners mailing list
> Beginners at haskell.org
> http://www.haskell.org/mailman/listinfo/beginners
>



More information about the Beginners mailing list