4

我希望输入一个在函数 f 中定义的函数 f',以便它们的两个类型规范都引用同一个类型变量。但是,当我尝试这样做时,我从编译器中得到一个编译错误,它假定m外部和m内部不是同一个类型变量。有关如何解决此问题的任何提示?

f :: (Monad m) => (String -> Int -> String -> m ()) -> [String] -> m () 
f _ (x:_) = f' Nothing x
  where 
    f' :: (Maybe Int) -> String -> m () -- when I comment this line, the code compiles
    f' _ _ = return ()

main = undefined
4

2 回答 2

4

检查http://www.haskell.org/haskellwiki/Scoped_type_variables

从链接: Scoped Type Variables are an extension to Haskell's type system that allow free type variables to be re-used in the scope of a function.

于 2013-08-19T14:55:35.620 回答
1

Haskell 98 Prelude 还包含一个函数asTypeOf,可用于在一定程度上模拟作用域类型变量(如果您使用不支持 XScopedTypeVariables 的编译器)。

请参阅http://hackage.haskell.org/packages/archive/base/latest/doc/html/Prelude.html#v:asTypeOf

于 2013-08-19T22:29:24.727 回答