代码之家  ›  专栏  ›  技术社区  ›  Kevin Meredith

理解抽象类型

  •  2
  • Kevin Meredith  · 技术社区  · 7 年前

    正在查看 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 ()
    

    这是什么意思 abstract 在里面 STM TVar ?

    1 回复  |  直到 7 年前
        1
  •  9
  •   Daniel Wagner    7 年前

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

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