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

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

7
Haskell関数構成(。)および関数適用($)イディオム:正しい使用
私はReal World Haskellを読んでいて、終わりに近づいていますが、スタイルの問題が(.)と($)演算子との関係で私を悩ませています。 他の関数の合成である関数を書くときは、次のように書きます。 f = g . h しかし、これらの関数の最後に何かを適用すると、次のように書きます。 k = a $ b $ c $ value しかし、本はそれをこのように書きます: k = a . b . c $ value 今、私にはそれらは機能的に同等に見え、私の目にはまったく同じことをしています。ただし、見れば見るほど、本のように関数を記述している人々が多くなります。(.)最初に構成し、最後にのみ($)値を追加してロットを評価します(多くのドル構成では誰も行いません)。 。 すべての($)記号を使用するよりもはるかに優れている本の方法を使用する理由はありますか?または、私がここで得ていないいくつかのベストプラクティスはありますか?それとも不必要ですか、まったく心配する必要はありませんか?

4
依存するメソッドタイプの説得力のある使用例は何ですか?
以前は実験的な機能であった従属メソッドタイプが、デフォルトでtrunkで有効になりました。これにより、Scalaコミュニティに興奮が生じたようです。 一見したところ、これが何に役立つかはすぐにはわかりません。Heiko Seebergerがここに依存メソッドタイプの簡単な例を投稿しました。コメントでわかるように、メソッドのタイプパラメータを使用して簡単に再現できます。したがって、それはそれほど説得力のある例ではありませんでした。(明らかなものが欠けている可能性があります。修正してください。) 依存するメソッドタイプの代替案より明らかに有利なユースケースの実用的で有用な例は何ですか? 以前は不可能/簡単でなかった、それらを使って何ができるか? 彼らは、既存の型システムの機能に対して何を購入するのですか? また、依存するメソッドタイプは、Haskell、OCamlなどの他の高度な型付き言語の型システムにある機能に類似しているか、それからインスピレーションを得ていますか?

4
Haskellのリストに関して「@」記号はどういう意味ですか?
次のようなHaskellコードを見つけました。 ps@(p:pt) 何をしない@シンボルは、この文脈で意味ですか?Googleで情報を見つけることができないようです(残念ながらGoogleでシンボルを検索するのは難しいです)。また、Preludeのドキュメントで関数を見つけることができないので、代わりに何らかの構文上の砂糖である必要があると思います。
127 haskell  syntax 

2
GHCで巨大なバイナリにコンパイルされた小さなHaskellプログラム
些細な小さなHaskellプログラムでさえ、巨大な実行可能ファイルになります。 私は(GHCで)コンパイルされてサイズが7 MBのバイナリにコンパイルされた小さなプログラムを書きました! 小さなHaskellプログラムでも巨大なバイナリにコンパイルされる原因は何ですか? これを減らすにはどうしたらいいですか?

8
Haskellでグラフをどのように表現しますか?
代数的データ型を使用してhaskellでツリーまたはリストを表すのは簡単です。しかし、どのようにグラフを活版印刷で表現するのでしょうか。ポインタが必要なようです。私はあなたが次のようなものを持つことができると思います type Nodetag = String type Neighbours = [Nodetag] data Node a = Node a Nodetag Neighbours そして、それは実行可能でしょう。ただし、少し切り離されているように感じます。構造内の異なるノード間のリンクは、リスト内の現在の前の要素と次の要素、またはツリー内のノードの親と子の間のリンクほど実際には「感じ」がありません。私が定義したように、グラフ上で代数的操作を行うことは、タグシステムを通じて導入される間接性のレベルによって多少妨げられるだろうという予感があります。 私がこの質問をするのは、主にこの疑念と優雅さの認識です。Haskellでグラフを定義するより良い/より数学的にエレガントな方法はありますか?それとも、本質的にハード/ファンダメンタルなものに遭遇しましたか?再帰的なデータ構造はすばらしいですが、これは別のことのようです。ツリーとリストが自己参照する方法とは異なる意味での自己参照データ構造。これは、リストとツリーがタイプレベルで自己参照であるように見えますが、グラフは値レベルで自己参照です。 では、実際に何が起こっているのでしょうか。

1
Emacs Interactive-Haskellは、cabalまたは作業ディレクトリのいずれかがプロジェクトディレクトリに設定されている場合、応答を返さない
のInteractive-Haskell replで奇妙な動作が発生していますemacs。ファイルを読み込むと、emacsミニバッファーに一連のインタラクティブなプロンプトが表示されます。 Start a new project named 'myproject'? Cabal dir (guessed from myproject.cabal): Build target (empty for default): Set current directory: cabalディレクトリまたは現在のディレクトリをプロジェクトディレクトリのデフォルト値のままにすると、replが応答しなくなります。対話型のHaskellウィンドウにラムダプロンプトが表示されて入力できますが、Enterキーを押すと評価されません。カーソルは、Enterキーをまったく押しなかった場合と同じ行に留まります。 これらの両方のディレクトリをプロジェクトディレクトリ以外のパスに変更すると、replは正常に動作し、式を期待どおりに評価します。
124 haskell  emacs  cabal  ghci 

2
Haskellデータ型のメモリフットプリント
Haskellにデータタイプの値を格納するために必要な実際のメモリ容量を見つけるにはどうすればよいですか(主にGHCを使用)。実行時に(GHCiなどで)評価することは可能ですか、それともそのコンポーネントから複合データ型のメモリ要件を見積もることは可能ですか? 一般的に、タイプのメモリ要件場合aとb知られている、などの代数データ型のメモリオーバーヘッドは何です。 data Uno = Uno a data Due = Due a b たとえば、これらの値が占めるメモリ内のバイト数は? 1 :: Int8 1 :: Integer 2^100 :: Integer \x -> x + 1 (1 :: Int8, 2 :: Int8) [1] :: [Int8] Just (1 :: Int8) Nothing ガベージコレクションの遅延により、実際のメモリ割り当てが高くなることを理解しています。遅延評価のために大きく異なる場合があります(サンクサイズは値のサイズとは関係ありません)。問題は、データ型が与えられた場合、完全に評価されたときにその値がどれだけのメモリを消費するかということです。 :set +sGHCiにはメモリ統計を表示するオプションがあることがわかりましたが、単一の値のメモリフットプリントを推定する方法は明確ではありません。

4
無限リストでのfoldlとfoldrの動作
この質問の myAny関数のコードでは、foldrを使用しています。述語が満たされると、無限リストの処理を停止します。 私はfoldlを使って書き直しました: myAny :: (a -> Bool) -> [a] -> Bool myAny p list = foldl step False list where step acc item = p item || acc (step関数への引数は正しく逆になっていることに注意してください。) ただし、無限リストの処理を停止しなくなりました。 私はApocalispの答えのように関数の実行を追跡しようとしました: myAny even [1..] foldl step False [1..] step (foldl step False [2..]) 1 even 1 || (foldl step …

6
Haskellタイプとデータコンストラクタ
Learnyouahaskell.comからHaskellを学んでいます。タイプコンストラクターとデータコンストラクターを理解できません。たとえば、私はこれの違いを本当に理解していません: data Car = Car { company :: String , model :: String , year :: Int } deriving (Show) この: data Car a b c = Car { company :: a , model :: b , year :: c } deriving (Show) 1つ目は、1つのコンストラクタ(Car)を使用してタイプのデータを構築するだけだと理解していCarます。2つ目はよくわかりません。 また、データ型は次のように定義されていますか? data Color = Blue | …
124 haskell 

3
リーダーモナドの目的は何ですか?
読者モナドはとても複雑で役に立たないようです。JavaやC ++のような命令型言語では、私が誤解しない限り、リーダーモナドには同等の概念はありません。 簡単な例を挙げて、これを少し明確にしていただけますか?

16
Haskellの初心者ガイド?[閉まっている]
現在のところ、この質問はQ&A形式には適していません。事実、参考文献、専門知識によって回答が裏付けられることを期待していますが、この質問は、討論、議論、投票、または拡張ディスカッションを求める可能性があります。この質問が改善され、場合によっては再開できると思われる場合は、ヘルプセンターにアクセスしてください。 8年前に閉鎖。 私はしばらく前からHaskellのまともなガイドを探していましたが、読み通すのに十分興味深いと思われるガイドや、意味のあるガイドを見つけることができませんでした。 私は数年前にHaskellに接触したことがありますが、それについてはあまり思い出せません。やっと手に入れたときは「あはっ!」という感覚が凄くて、実は楽しかったので、失われたハスケルのアートを再発見したいと思っています。 私はRubyとその関数型プログラミングの手法に精通しているので、完全に暗闇の中にいるわけではないと思います。リンクは?


3
残りのフィールドをコピーしながら、レコード内の単一のフィールドを割り当てる簡単な方法は?
次のレコードADTがあるとします。 data Foo = Bar { a :: Integer, b :: String, c :: String } 次のように、レコードを取り、1つのフィールドを除くすべてのフィールドが引数として渡されたものと同一の値を持っている(同じタイプの)レコードを返す関数が必要です。 walkDuck x = Bar { a = a x, b = b x, c = lemonadeStand (a x) (b x) } 上記は10機能しますが、より多くのフィールド(たとえば)を持つレコードの場合、そのような関数を作成すると、多くの入力が必要になるので、かなり不要です。 同じことをする面倒な方法はありますか?
119 haskell  record 


5
Haskellでの「Just」構文の意味は何ですか?
このキーワードの実際の説明をインターネットで調べました。私が見てきたすべてのHaskellチュートリアルは、ランダムにそれを使い始めただけで、それが何をするものであるかを説明することはありません(そして私はたくさん見てきました)。 以下は、を使用するReal World Haskellの基本的なコードJustです。私はコードが何をするかを理解していますが、目的や機能が何であるかを理解していませんJust。 lend amount balance = let reserve = 100 newBalance = balance - amount in if balance < reserve then Nothing else Just newBalance 私が観察したことから、それはMaybeタイピングに関連していますが、それは私が何とか学んだすべてです。 何をJust意味するのかをよく説明していただければ幸いです。
118 haskell  syntax 

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