理解抽象类型

时间:2017-11-04 14:12:25

标签: haskell

Parallel and Concurrent Programming in Haskell,我看到了:

data STM a -- abstract
instance Monad STM -- among other things

atomically :: STM a -> IO a

data TVar a -- abstract
newTVar   :: a -> STM (TVar a)
readTVar  :: TVar a -> STM a
writeTVar :: TVar a -> a -> STM ()

abstractSTMTVar的含义是什么?

1 个答案:

答案 0 :(得分:9)

抽象数据类型是不公开其实现的类型;仅提供生成和使用该类型的类型和一些操作,但构造函数本身不可供您使用。

这通常是出于以下一个或两个原因:

  1. 关于该类型的哪些值有效哪些类型系统无法保证,并且必须通过仔细编程必须保证哪些值有一些不变量。如果提供的每个操作都保留它们,那么只有图书馆作者需要小心,图书馆的用户可能会无忧无虑。
  2. 数据的表示可能会不断变化。如果类型是抽象的,那么库的未来版本可以自由地改变类型的实现方式,而不必担心破坏现有程序,只要新表示仍然可以支持现有的构造和销毁操作。