2016-02-12 13 views
5

大きなプロジェクト(いくつかのライブラリといくつかの実行可能ファイルを含む)に私自身のPreludeを使用することに決めました。 Preludeは一部の部分関数をエクスポートせず、いくつかの共通関数をエクスポートします(つまりControl.Monadなどから)。しかし、私はそれを行う方法と戦っています。私は試しました:「会社」プレリュードを正しく定義する方法

  1. 使用base-nopreludeです。モジュールmy-common-modulePrelude.hsを作成します。

  2. 上記と同じですが、my-common-moduleの代わりにMy.Preludeを作成してください。他のすべてのモジュールでは、私は矛盾を取得として)1で、私はちょうど、ghciを実行できないということですimport My.Prelude

問題にファイルprelude/Prelude.hsを作成し、hs-source-dirs徒党セクションに入れて、ディレクトリ「前奏曲」を作成basemy-common-module。 2)ghciで動作しますが、cabal replは、 'モジュールを使用しようとしています' Prelude '(prelude/Prelude.hs)が読み込まれていないという不思議なことで失敗します。さらに、base-nopreludeghcjsのようには思われません。これはプロジェクトの一部(コード共有)に使用します。

import Prelude() 
import My.Prelude 

または

{-# LANGUAGE NoImplicitPrelude #-} -- or extensions: NoImplicitPrelude in .cabal 
... 
import My.Prelude 

「伸長:NoImplicitPrelude」が必要とするオプションが最高の私には思える

それは唯一の方法は、現在でそれぞれ、すべてのファイルを開始することであるように思えますインポートするすべてのファイルMy.Preludeそれ以外の場合は動作しません。私はカスタムプレリュードを達成すると同時に、cabal replghcjsで作業する明白な方法が欠けていますか?

更新:base-nopreludeは、GHC.Eventの再エクスポートを手動で削除したときにGHCJSで動作します。

更新:私はこれで少し時間を費やしました。 1)は正しい道だと私には思われます。 cabal repl作品(感謝ユーラス)、ghciはghci -hide-package baseと一緒に読み込まれなければならないし、また動作する必要があります。

+0

私はそれを行う方法はないと思う(私は頑張った)。 'Prelude 'モジュールの使用を試みる問題は、[ここ](https://ghc.haskell.org/trac/ghc/ticket/10920)で報告されています。 – Yuras

+0

1)のすべての例を共有できますか?それは私のために働いていないので:( そして、私は今あなたの手助けをした場所を確信しています:) – Yuras

+2

私は 'base-myprelude'という別のカバールプロジェクトを作成しました。これはいくつかのことを定義し、 'Prelude.hs'をエクスポートします(私はいくつかのサブモジュールで' NoImplicitPrelude'を使用しなければなりませんでした)。それから私は私自身のプロジェクトを持っています。私のプロジェクトは、カバールの中では、ベースノップレイド、ベースミプレイドです。私が取り組んでいるプロジェクトは公開されていないので、あなたにレポを指摘することはできません。アップデート: 'cabal repl'は' base-myprelude'では動作しませんが、あなたが求めているのであれば 'my-project'で動作します。 – ondra

答えて

3

私が働くようで、この設定になってしまった:スペシャルパッケージmy-preludeを作成

  • 。このパッケージはPreludeをエクスポートし、他のモジュールを含むことができ、baseに依存することができます。循環依存を避けるために、いくつかのモジュールで{-# LANGUAGE NoImplicitPrelude #-}を使用する必要があるかもしれません。例えば。独自のPreludeで別のファイル(例:Orphans.Lib_aeson)で定義してエクスポートした孤立したインスタンスを作成する場合、これらのファイルにはNoImplicitPreludeが必要です。

  • メインプロジェクトでは、ライブラリなどは、キャブの依存関係をbaseからbase-noprelude, my-preludeに変更します。

何作品:

  • cabal repl
  • GHCiの/ runghcは動作しますが、あなたはghci -hide-package baseでそれを開始する必要があります。

    • cabal replmy-preludeパッケージに:それ以外の場合は動作しません何

  • base間と my-prelude競合が存在します。
関連する問題