タグ付けされた質問 「ghc」

Glasgow Haskell Compilerは、最先端のオープンソースコンパイラであり、関数型言語Haskellのインタラクティブな環境です。特に明記されていない限り、ほとんどすべての人がこれを使用するため、一般的にHaskellについてではなく、GHCについての質問にこのタグを使用します。


1
なぜこのHaskellコードは-Oで遅くなるのですか?
このHaskellコードは、を使用すると実行速度が大幅に低下しますが-O、危険で-Oはありません。誰が何が起こったのか教えてもらえますか?それが重要な場合は、この問題を解決する試みであり、バイナリ検索と永続セグメントツリーを使用します。 import Control.Monad import Data.Array data Node = Leaf Int -- value | Branch Int Node Node -- sum, left child, right child type NodeArray = Array Int Node -- create an empty node with range [l, r) create :: Int -> Int -> Node create l r | l …

6
Haskellの孤立したインスタンス
Haskellアプリケーションを-Wallオプションでコンパイルすると、GHCは孤立したインスタンスについて文句を言います。例: Publisher.hs:45:9: Warning: orphan instance: instance ToSElem Result 型クラスToSElemは私のものではなく、HStringTemplateによって定義されています。 これを修正する方法(インスタンス宣言をResultが宣言されているモジュールに移動する)と、GHCが孤立したインスタンスを回避する理由を理解しましたが、それでも私の方法の方が優れていると思います。コンパイラが不便であるかどうかは気にしません-私よりもむしろ。 ToSElemPublisherモジュールでインスタンスを宣言する理由は、他のモジュールではなく、HStringTemplateに依存するのはPublisherモジュールだからです。私は関心の分離を維持し、すべてのモジュールがHStringTemplateに依存することを避けようとしています。 Haskellの型クラスの利点の1つは、たとえばJavaのインターフェイスと比較した場合、閉じているのではなく開いているため、インスタンスをデータ型と同じ場所で宣言する必要がないことだと思いました。GHCのアドバイスはこれを無視することのようです。 ですから、私が探しているのは、私の考えが健全であり、この警告を無視/抑制することで正当化されるという検証、または私のやり方に反対するより説得力のある議論のいずれかです。
86 haskell  ghc  typeclass 

4
Stringを型クラスのインスタンスにできないのはなぜですか?
与えられた: data Foo = FooString String … class Fooable a where --(is this a good way to name this?) toFoo :: a -> Foo のStringインスタンスを作成したいFooable: instance Fooable String where toFoo = FooString 次にGHCは不平を言います: Illegal instance declaration for `Fooable String' (All instance types must be of the form (T t1 ... …

1
このGHCコアの「証拠」を読む方法は?
私は、GHCが自然数の場合、偶数を半分にすることしかできないことをどのように証明するかを理解するために、このHaskellの小さなビットを書きました。 {-# LANGUAGE DataKinds, GADTs, KindSignatures, TypeFamilies #-} module Nat where data Nat = Z | S Nat data Parity = Even | Odd type family Flip (x :: Parity) :: Parity where Flip Even = Odd Flip Odd = Even data ParNat :: Parity -> * where PZ :: …

4
Cabalパッケージのバージョンをアンインストールするにはどうすればよいですか?
Happstack Liteは、blaze-htmlバージョン0.5を取得していて、バージョン0.4が必要なため、問題が発生しています。Cabalによると、バージョン0.4.3.4と0.5.0.0の両方がインストールされています。0.5.0.0を削除して、古いバージョンだけを使用したいと思います。しかし、秘密結社は、「アンインストール」コマンドを持っていない、と私はしようとするとghc-pkg unregister --force blaze-html、ghc-pkg私のコマンドが無視されてきたと言います。 私は何をしますか? 更新:信じないでください。ghc-pkgコマンドを無視すると主張していますが、コマンドは無視されません。そして、ドン・スチュワートの受け入れられた答えで、あなたはあなたが排除したいバージョンを正確に削除することができます。
82 haskell  ghc  cabal 

1
Haskellでの(^)の奇妙な動作
GHCiが以下の不正解を返すのはなぜですか? GHCi λ> ((-20.24373193905347)^12)^2 - ((-20.24373193905347)^24) 4.503599627370496e15 Python3 >>> ((-20.24373193905347)**12)**2 - ((-20.24373193905347)**24) 0.0 更新 Haskellの(^)関数を次のように実装します。 powerXY :: Double -> Int -> Double powerXY x 0 = 1 powerXY x y | y < 0 = powerXY (1/x) (-y) | otherwise = let z = powerXY x (y `div` 2) in …

1
Haskellでの暗黙の静的型キャスト(強制)
問題 Haskellの次の設計問題を考えてみましょう。変数や一般式(多変量多項式)などを表現したい、シンプルでシンボリックなEDSLがありますx^2 * y + 2*z + 1。また、私は、表現上の特定のシンボリック方程式を表現言いたいx^2 + 1 = 1だけでなく、定義のように、x := 2*y - 2。 目標は次のとおりです。 変数と一般式には別のタイプを使用します。特定の関数は、複雑な式ではなく変数に適用される場合があります。たとえば、定義演算子:=はタイプである可能性があり (:=) :: Variable -> Expression -> Definition、左側のパラメーターとして複雑な式を渡すことはできません(明示的なキャストを行わずに、右側のパラメーターとして変数を渡すことができるはずです)。 。 式をのインスタンスにNumすることで、整数リテラルを式に昇格させ、補助ラッパー演算子を導入しなくても、加算や乗算などの一般的な代数演算に便利な表記法を使用できます。 言い換えると、変数を式に暗黙的かつ静的に型キャスト(強制)したいのです。そのため、Haskellには暗黙の型キャストがないことを知っています。それにもかかわらず、特定のオブジェクト指向プログラミングの概念(この場合は単純な継承)は、言語拡張の有無にかかわらず、Haskellの型システムで表現できます。軽量の構文を維持しながら、上記の両方の点をどのように満たすことができますか?可能ですか? 討論 ここでの主な問題はNumの型制限であることは明らかです。 (+) :: Num a => a -> a -> a 原則として、変数と式の両方に単一の(一般化された)代数データ型を書き込むことが可能です。次に、:=左側の式が区別され、変数コンストラクターのみが受け入れられ、それ以外の場合はランタイムエラーが発生するように記述できます。ただし、これはクリーンで静的な(つまりコンパイル時の)ソリューションではありません... 例 理想的には、次のような軽量の構文を実現したいと思います computation = do x <- variable t …

3
MonadReaderを定義するためにFunctionalDependencyが必要なのはなぜですか?
クラスの定義を理解できた MonadReader class Monad m => MonadReader r m | m -> r where ... Haskellの関数型依存関係のドキュメントを読んだ後| m -> r、型変数rがによって一意に決定されることを指定していることが理解できますm。これまでに見たMonadReaderのいくつかの典型的なインスタンス(例:)に基づいて、この要件は妥当だと思いますがReader、Readerこの機能的な依存関係句がなくてもインスタンスを定義できるように思えます。 私の質問は、MonadReaderの定義に機能的な依存関係が必要な理由です。これは、MonadReaderを適切に定義できないという意味で、MonadReaderを定義するために機能的に必要ですか?
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.