任意の型をしまえるコンテナ(といっても当然破壊的変更はできない)。
% runhaskell
module Main (main) where
import Data.Vault (Vault)
import qualified Data.Vault as V
sayHello :: Show a => V.Key a -> Vault -> IO ()
sayHello key v = maybe (return ()) print (V.lookup key v)
main :: IO ()
main = do
poti <- V.newKey
zero <- V.newKey :: IO (V.Key Int)
let v = (V.insert zero 0 . V.insert poti "poti") V.empty
sayHello zero v
sayHello poti v
キーに型情報が入っているのでうまくいく。キーの生成にST
かIO
のモナドが必要。
0
"poti"