扩展Haskell模

扩展Haskell模,haskell,module,libraries,Haskell,Module,Libraries,有没有办法在Haskell中扩展库模块 例如,我想将firstToLower函数添加到Data.String。当我创建自己的Data.String时,它会屏蔽库1: module Data.String where import Prelude import Data.Char (toLower) firstToLower :: String -> String firstToLower (c:cs) = toLower c : cs firstToLower "" = "" 然后我

有没有办法在Haskell中扩展库模块

例如,我想将
firstToLower
函数添加到
Data.String
。当我创建自己的
Data.String时,它会屏蔽库1:

module Data.String where

import Prelude
import Data.Char (toLower)

firstToLower :: String -> String
firstToLower (c:cs) = toLower c : cs
firstToLower "" = ""
然后我在尝试导入数据时出错。字符串(行)

如果能做到这一点,那就太好了。如果没有,针对这种情况的最佳做法是什么?这些扩展应该放在哪里

多谢各位

更新


我不打算以库的形式发布我的扩展,只是想在我的项目中以一种有意义的方式组织它。

不,这是不可能的。人们需要的一个解决方案是将您添加的内容放在一个名为
Data.String.Extra
的模块中,并在Hackage上发布该模块(如果您认为您添加的内容可能对其他人有用)


或者,您可以。

简而言之,您不能扩展haskell模块。您的用例是什么?我已经在我的问题中描述了用例。我在寻求一种方法来处理我从库中丢失的函数。我不想把它和我的普通代码混在一起,因为它们自然属于库。而且,对于标准库模块来说,您的示例函数是非常具体和琐碎的。注意,您的实现不是很地道,我更喜欢
firstToLower(c:cs)=tolowerc:cs;firstToLower“=”
@leftaroundaoundabout,您的版本更干净了,谢谢。我不打算将我的扩展作为库发布,只是想以一种有意义的方式将其组织到我的项目中。我可能会听从你的建议,把它放在
*。额外的
。非常感谢。
Module `Data.String' does not export `lines'