我有一个代码,使用fromRight大约GHC 8.2定义的函数.但我需要降级到8.0.2 GHC,这给了约一个错误Variable not in scope:的fromRight
我想知道是否可能以及如何添加缺少的定义
fromRight :: b -> Either a b -> b
fromRight _ (Right b) = b
fromRight b _ = b
Run Code Online (Sandbox Code Playgroud)
所以它只在我使用GHC版本而不是8.2.1时使用?
通常,当您想知道库函数时,您应该使用CPP.
{-# language CPP #-}
#if !MIN_VERSION_base (4,10,0)
fromRight :: ...
#endif
Run Code Online (Sandbox Code Playgroud)
这些MIN_VERSION_...宏过去由Cabal提供; 现在他们是由GHC提供的.如果你想在GHC的旧版本中使用它们,你需要使用Cabal(使用cabal-install或者stack).
在你遇到这样做的麻烦之前,请注意有几个包含名称结尾的包,-compat可以为你完成所有工作.在这种情况下,你可以使用fromRight从Data.Either.Compat在base-compat包中.那么你不必在意你是否使用了足够新的base库.