2013-10-08 2 views
3

하스켈에서 라이브러리 모듈을 확장 할 수있는 방법이 있습니까?하스켈 모듈 확장

예를 들어, firstToLower 기능을 Data.String에 추가하고 싶습니다. 나는 하나의 라이브러리 내 자신의 Data.String이 마스크를 만들 때 :

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

이 같은 일이 가능하다면 정말 좋은 것 :

module Data.String where 

import Prelude 
import Data.Char (toLower) 

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

은 그 때 나는 오류가 import Data.String (lines)하려고 얻을. 그렇지 않은 경우 그러한 상황에 대한 모범 사례는 무엇입니까? 그러한 확장을 어디에 배치해야합니까?

감사합니다.

업데이트 내가 라이브러리로 내 확장을 출시 할 계획이없는

, 그냥 의미있는 방식으로 내 프로젝트의 내부를 구성하고 싶습니다.

+0

요약하면, 당신은 haskell 모듈을 확장 할 수 없습니다. 이것에 대한 귀하의 유스 케이스는 무엇입니까? – Satvik

+0

제 질문에 유스 케이스를 설명했습니다. 도서관에서 놓친 기능을 다루는 방법을 묻고 있습니다. 자연스럽게 라이브러리에 속하기 때문에 공통 코드와 혼합하고 싶지 않습니다. – lambdas

+0

또한 예제 함수는 특정 라이브러리 모듈에 대해 특별하고 사소한 것으로 간주되는 IMO입니다. 구현이 그리 관용적이지는 않다는 점에 유의하십시오. firstToLower (c : cs) = toLower c : cs; firstToLower ""= ""'. – leftaroundabout

답변

10

아니요, 불가능합니다. 하나의 해결책은 사람들 have used in the pastData.String.Extra과 같은 이름의 모듈에 추가 내용을 넣고 그 모듈을 Hackage에 공개하는 것입니다 (추가 된 내용이 다른 사람들에게 유용 할 수 있다고 생각하는 경우).

또는 propose your extension for inclusion in the standard library 수 있습니다.

+0

내 확장 기능을 라이브러리로 출시 할 계획이 없으며 단지 내 프로젝트 내에서 의미있는 방식으로 구성하려고합니다. 나는 충고를 따라'* .Extra' 안에 넣을 가능성이 높습니다. 고맙습니다. – lambdas