ghc-exactprint-0.2: tests/examples/FunctionalDeps.hs
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE FunctionalDependencies #-}
-- from https://ocharles.org.uk/blog/posts/2014-12-14-functional-dependencies.html
import Data.Foldable (forM_)
import Data.IORef
class Store store m | store -> m where
new :: a -> m (store a)
get :: store a -> m a
put :: store a -> a -> m ()
instance Store IORef IO where
new = newIORef
get = readIORef
put ioref a = modifyIORef ioref (const a)