2013-10-08 159 views
3

有什么办法在Haskell中扩展库模块?扩展Haskell模块

例如,我想添加firstToLower函数到Data.String。当我创建我自己的Data.String它掩盖库之一:

module Data.String where 

import Prelude 
import Data.Char (toLower) 

firstToLower :: String -> String 
firstToLower (c:cs) = toLower c : cs 
firstToLower "" = "" 

然后我得到错误试图import Data.String (lines)

Module `Data.String' does not export `lines' 

这将是非常好的,如果这样的事情是可能的。如果不是,这种情况的最佳做法是什么?应在哪里放置这样的扩展名?

谢谢。

更新

我不打算释放我的分机作为一个库,只是想组织它在我的项目中以有意义的方式。

+0

总之,你不能扩展haskell模块。你的用途是什么? – Satvik

+0

我在我的问题中描述过用例。我正在寻求一种方法来处理我从图书馆错过的功能。我不想将它与我的通用代码混合,因为它们自然属于图书馆。 – lambdas

+0

另外,您的示例函数是IMO针对标准库模块考虑的具体和微不足道的事情。请注意,你的实现不是很习惯,我更喜欢'firstToLower(c:cs)= toLower c:cs; firstToLower“”=“”'。 – leftaroundabout

回答

10

不,这是不可能的。人们have used in the past的一个解决方案是将您的新增内容添加到名称为Data.String.Extra的模块中,并在Hackage上释放该模块(如果您认为添加内容可能对其他人有用)。

或者,您可以propose your extension for inclusion in the standard library

+0

我不打算将我的扩展作为库发布,只是想以有意义的方式在我的项目中组织它。我很可能会遵从你的建议并将它放在'* .Extra'中。谢谢。 – lambdas