Haskell类型类

Geo*_*off 8 haskell typeclass

我有一个Haskell类型类问题.我无法通过语法来获得在GHC下编译的这个(看似合理的)程序.

import Control.Concurrent.MVar

blah1 :: [a] -> IO ([a])
blah1 = return

blah2 :: [a] -> IO (MVar [a])
blah2 = newMVar

class Blah b where
  blah :: [a] -> IO (b a)

instance Blah [] where
  blah = blah1

-- BOOM
instance Blah (MVar []) where
  blah = blah2

main :: IO ()
main = do
  putStrLn "Ok"
Run Code Online (Sandbox Code Playgroud)

我收到以下错误消息,哪种有意义,但我不知道如何解决它:

`[]' is not applied to enough type arguments
Expected kind `*', but `[]' has kind `* -> *'
In the type `MVar []'
In the instance declaration for `Blah (MVar [])'
Run Code Online (Sandbox Code Playgroud)

eph*_*ent 12

你想要的不是直接表达的.这可能就像你得到的那样接近:

newtype MVarList a = MVarList (MVar [a])
instance Blah MVarList where
    blah = fmap MVarList . newMVar
Run Code Online (Sandbox Code Playgroud)

  • 您可以使用Conal Elliot的TypeCompose包:http://hackage.haskell.org/cgi-bin/hackage-scripts/package/TypeCompose它将允许您编写`实例Blah(O MVar [])`,其中O是类型级别的组合. (3认同)