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

Haskellは、強力な静的型付け、遅延評価、広範な並列処理と同時実行のサポート、独自の抽象化機能を備えた関数型プログラミング言語です。

2
純粋なApplicativesの必要性
HaskellのApplicativesを学習しています。pureたとえば、関数は実際には必要ないようです(おそらく間違っています)。 pure (+) <*> [1,2,3] <*> [3,4,5] 次のように書くことができます (+) <$> [1,2,3] <*> [3,4,5] 誰かpureが明示的なマッピングよりも関数が提供する利点を誰かに説明できますかfmap?

2
種類を推定するときに「Learn You a Haskell」で行われた仮定は何ですか?
この質問は主観的ではありません。参照されている本では非常に具体的な動詞が使用されています。私は何かを誤解しているのではないかと思うので、その表現の意味が何であるかを理解したいと思います。 あなたを学びハスケル、次の段落は、「我々は仮定含む第3の最後の一つです*」。 data Barry t k p = Barry { yabba :: p, dabba :: t k } そして今、それをのインスタンスにしたいと思いますFunctor。Functor種類の種類* -> *がBarry必要ですが、その種類があるようには見えません。どんな種類Barryですか?まあ、それは3つの型パラメーターを取るので、それはになるでしょうsomething -> something -> something -> *。これpは具体的なタイプであり、一種のを持っていると言っても安全です*。のためにk、我々は*、したがって、拡張によってt、一種のを持っていると仮定し* -> *ます。次に、これらの種類を、somethingプレースホルダーとして使用したに置き換えるだけで、種類がであることがわかり(* -> *) -> * -> * -> *ます。 なぜ私たちは何かを仮定しているのですか?「Xを仮定する(つまり、Xがtrueであると仮定する)」と読むと、Xがfalseの場合も考慮する必要があると考えるのは自然なことです。例の具体的なケースでは、できなかったt種類のもの(* -> *) -> *とk種類の(* -> *)?これが事実であったとしてもt、k実際にそうであったとしても、t kまだ具体的なタイプでしょうか? その後、推論のすべての行がコンパイラーに対してチェックされることがわかりますが、コンパイラーが想定しているとは思いません。もしそうなら、私はそれが何であるか知りたいのですが、もしそうでなければ、私はその段落の意味を見失っていると思います。
18 haskell 


2
Haskell:Typeclass vs関数を渡す
私には、型クラスを使用するのではなく、常に関数の引数を渡すことができるようです。たとえば、等価型クラスを定義するのではなく、 class Eq a where (==) :: a -> a -> Bool そして、型引数を示すために他の関数でそれを使用することはのインスタンスでなければならないEq: elem :: (Eq a) => a -> [a] -> Bool elemタイプクラスを使用せずに関数を定義し、代わりに機能する関数引数を渡すことはできませんか?


1
as-patternのほかに、Haskellで@は何を意味しますか?
私は現在Haskellを研究しており、Haskellを使用して暗号アルゴリズムを実装するプロジェクトを理解しようとしています。Learn You a Haskell for Great Goodをオンラインで読んだ後、私はそのプロジェクトのコードを理解し始めます。次に、「@」記号が付いた次のコードで行き詰まっていることがわかりました。 -- | Generate an @n@-dimensional secret key over @rq@. genKey :: forall rq rnd n . (MonadRandom rnd, Random rq, Reflects n Int) => rnd (PRFKey n rq) genKey = fmap Key $ randomMtx 1 $ value @n ここで、randomMtxは次のように定義されています。 -- | A random …

1
Haskellパーサーは、数値リテラルでUnicode数字を許可する必要がありますか?
演習として、Haskellのパーサーをゼロから作成しています。レクサーを作成する際に、Haskell 2010レポートの次のルールに気づきました。 数字 → ascDigit | uniDigit ascDigit → 0| 1| …| 9 uniDigit →任意のUnicode 10進数 オクティット → 0| 1| …| 7 hexit → digit | A| …| F| a| …|f 10進数 → 数字 { 数字 } 8進数 → octit { octit } 16進数 → hexit { hexit } 整数 …

1
「オプション」のファンラーホーフェン表現はありますか
多くのタイプの光学系には、ファンラーホーフェンの表現があります。 たとえばLens、タイプのa は次のLens s t a b ように表すことができます。 Functor f => (a -> f b) -> s -> f t 同様にTraversal、は同様の方法で表すことができ、Functor制約をApplicative次のように入れ替えます。 Applicative f => (a -> f b) -> s -> f t MonocleやArrowなどのいくつかの光学フレームワークは、というタイプを定義しますOptional。 Monocleの光学では、階層 OptionalはLensとの間に適合しますTraversal 私が理解しているように:a Traversalが0から多くのターゲットをLens持つ可能性がある aのような場合、は0から1のターゲットを持つ可能性があるOptional aのようなものです。Lens Monocleでは、Optional関数のペアとして定義されます。 getOrModify :: s -> Either t a set :: …

2
スタックはGHCおよびCabalバージョンでテストされていません
私のHaskellプロジェクトでは stack runでは、次のように表示されていますが、まだ実行されています。これは何の警告ですか?どうすればそれを取り除くことができますか? Stack has not been tested with GHC versions above 8.6, and using 8.8.2, this may fail Stack has not been tested with Cabal versions above 2.4, but version 3.0.1.0 was found, this may fail

3
0から5の値を持つリストを表すための型
0から5の値を持つリストを表すためのタイプを定義する必要がある練習があります。最初に私はこれを次のように再帰的に解決できると思いました: data List a = Nil | Content a (List a) しかし、これが正しいアプローチだとは思いません。考えの食べ物をください。
14 haskell 

3
折りたたみ後の後処理ステップなしでこの単語機能を実装することは可能ですか?
印刷物のReal World Haskell、第4章、98ページでは、words折りたたみを使用して実装できるかどうかを尋ねられますが、これも私の質問です。 出来ますか?そうでない場合、なぜですか?もしそうなら、どうですか? 私は次のことを思いつきました、これは各非スペースが出力リストの最後の単語の前に追加されるべきであるという考えに基づいています(これはotherwiseガードで発生します)、そして空白は空の単語の追加をトリガーするべきであるという考えに基づいています出力リストがまだ存在しない場合(これがで取り扱われますif- - )。thenelse myWords :: String -> [String] myWords = foldr step [[]] where step x yss@(y:ys) | x == ' ' = if y == "" then yss else "":yss | otherwise = (x:y):ys 入力文字列の先頭にスペースがあると、文字列の出力リストに1つの空の文字列が先行するため、このソリューションは間違いです。 上記のリンクで、私は他の読者のために提案された解決策のいくつかを調べました、そしてそれらの多くは私の解決策と同様に動作しますが、それらは一般的に、例えば、tailもしあるならそれを空の先行文字列です。 他のアプローチはタプル(実際にはペアのみ)を使用するため、フォールドはペアを処理し、先頭/末尾のスペースを適切に処理できます。 これらすべてのアプローチfoldr(または別のフォールド、fwiw)は、箱から出して最終的な出力を提供する関数ではありません。なんとかして出力を調整しなければならない何かが常にあります。 したがって、私は最初の質問に戻って、words折りたたみを使用して(末尾/先頭/繰り返しのスペースを正しく処理する方法で)実際に実装できるかどうかを尋ねます。折り目を使用して、私は折りたたみ機能は、最も外側の関数でなければならないことを意味します。 myWords :: String -> [String] myWords …


1
unsafeDupablePerformIOとaccursedUnutterablePerformIOの違いは何ですか?
私はハスケル図書館の制限付きセクションをさまよっていて、次の2つの卑劣な呪文を見つけました。 {- System.IO.Unsafe -} unsafeDupablePerformIO :: IO a -> a unsafeDupablePerformIO (IO m) = case runRW# m of (# _, a #) -> a {- Data.ByteString.Internal -} accursedUnutterablePerformIO :: IO a -> a accursedUnutterablePerformIO (IO m) = case m realWorld# of (# _, r #) -> r 実際の違いは、ちょうど間のようですrunRW#し、($ realWorld#)しかし、。私は彼らが何をしているのかについていくつかの基本的な考えを持っていますが、私はそれらを重ねて使用することの本当の結果は得ていません。誰かが違いを教えてくれませんか?


3
Haskellの機能を可能な限り短くするにはどうすればよいですか?
seasonこの関数は代数関数を使用していますが、コードを繰り返しているような気がします。 できるだけ短くするにはどうすればよいですか? data Month = Jan | Feb | Mar | Apr | May | June | July | Aug | Sept| Oct | Nov | Dec deriving (Eq,Ord,Show,Read) data Seasons = Spring | Summer | Autumn | Winter deriving (Eq,Ord,Show,Read) season :: Month -> Seasons season Jan = Winter …

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.