[英]How to define function only for old versions in GHC?
我有一个代码,使用大约GHC 8.2定义的fromRight
函数。 但我需要降级到GHC 8.0.2,这会给出一个关于Variable not in scope:
的错误Variable not in scope:
fromRight
我想知道是否可能以及如何添加缺少的定义
fromRight :: b -> Either a b -> b
fromRight _ (Right b) = b
fromRight b _ = b
所以它只在我使用GHC版本而不是8.2.1时使用?
通常,当您想知道库函数时,您应该使用CPP。
{-# language CPP #-}
#if !MIN_VERSION_base (4,10,0)
fromRight :: ...
#endif
MIN_VERSION_...
宏曾经由Cabal提供; 现在他们是由GHC提供的。 如果你想在GHC的旧版本中使用它们,你需要使用Cabal(使用cabal-install
或stack
)。
在您遇到此问题之前,请注意有几个名称以-compat
结尾的程序包可以为您完成所有工作。 在这种情况下,你可以使用fromRight
从Data.Either.Compat
在base-compat
包。 那么你不必关心你是否使用了足够新的base
库。
你总是可以写
import Prelude hiding (fromRight)
即使在Prelude中不存在fromRight
,它也是有效的。 因此,如果您要编写与Prelude的新旧版本兼容的模块,您只需选择忽略新的fromRight
函数,并始终使用库中的那个。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.