問題タブ [scalaz]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
validation - Scalazの検証とApplicativeBuilderの制限
プロジェクトでは、HTTPパラメーターを検証するためにscalaz検証トレイトを使用しています。一般的なケースは、検証された値をいくつか取得し、それらすべてが有効な場合にのみ必要なアクションを実行し、そうでない場合はエラーのリストを返します。
| @ |のため、8つを超えるパラメーターを使用する必要があるまで、これはうまく機能します。演算子は、8つの引数に制限されているApplicativeBuilderを作成します。このような一括検証を実行する別の方法はありますか?できればコードを読みやすくしますか?
scala - 末尾再帰とscalazの約束
私は現在、Scalazノンブロッキング先物(別名)で遊んでいます。約束。次の関数を末尾再帰にするのに苦労しています。
ここp
で、はtypeの述語であり、I=>Boolean
はtypef
の並行関数I=>Promise[I]
です。
メソッドはアノテーションなしでコンパイルされます。
ヒントはありますか?ありがとう
python - python-twisted ベースのコードを scala に移植: フレームワークのアドバイスが必要
Python で書かれたコードをツイストで scala に大量に移植しようとしており、どのフレームワークの組み合わせを選択するかについて意見を求めています。
これは基本的に RPC (カスタム protobuf ベース + xmlrpc)/HTTP サーバーとクライアントであり、データベースの保持と変換を行いますが、後でこの書き換えの範囲外のワーカーに rpcs を送信します。
RPC スタックを実装するためのネットワーク IO/ベースとして、netty を使用しています。古いもののすべてのワークフローは twisted の Deferred に基づいていました。それを置き換えるために、ChannelFuture を直接使用するか、scalaz.Promise または akka.Future 内にラップすることを現在検討しています。
質問の一部は、コールバックを手動で操作するよりも簡単に実行できるかということだと思います。このルートを選択した場合、後でいくつかのラッパーを追加して継続を使用することで単純化できると思いますが、最初から別のものを使用する必要があるのでしょうか?
アクター モデル内のワークフローに合わせようとしましたが、stdlib アクターでは機能しないようです。
ありがとう。
更新: Finagle は、Twisted に非常によく似ているか、少なくとも偶然似ているようです。twitter.util.Future は twisted の Deferred によく似ています。なのでとりあえず使っています。
更新 2:そもそも移植した理由は、静的型付けとパフォーマンスです。
scala - Scalaサブタイピング+暗黙の変換の問題
私はscalazライブラリを使用してscalaのモナドで何かをしようとしていますが、サブタイピングでうまく機能させるのに問題があります。
私は自分のモナドを定義することから始めました。簡単にするために、それをアイデンティティモナドとします。
次に、いくつかの追加機能で拡張しました。
この追加機能により、ExtendedId
はもはやモナドではありません。
ここで、タイプのオブジェクトを:ExtendedId[A]
として使用したいと思います。Id[A]
ExtendedId
はモナドではないので、出力として取得できる最高のものはであると理解していることに注意してください。それで問題ありませんId[Int]
。しかし残念ながら、そのコードはまだコンパイルされません。
ただし、これは次のことを行います。
ここで、asId
関数は引数をfromからにアップキャストするだけExtendedId[A]
ですId[A]
。完全に冗長なはずですが、そうではありません。
なぜこうなった?Id[A]
を含むオブジェクトへの暗黙の変換が存在し、からへmap
の些細な暗黙の変換が明らかに存在します。では、なぜコンパイラーはそれらを組み合わせることができないのですか?ExtendedId[A]
Id[A]
scala - 2つのFunction0値を1つのFunction0に組み合わせるにはどうすればよいですか?
私はこのようなものを想像します:
にM
なりますがFunction0
。これはscalazで可能ですか?
validation - scalaz バリデーションとリストモナド
私は次のようなものを考え出そうとしています:
上記のコードはコンパイルされず、構文的に意味がありません。
モナドの方法で検証のリストを実行しようとしています。どうすればそれを達成できますか?
scala - scalazを使用した開発には、Unicode / APLのようなキーボードが必要ですか?
scalazは、適切なUnicode文字を含むキーボードなしで使用できますか、またはすべてのUnicode識別子に同等の「ASCII」がありますか(ある場合、その状態が維持される保証はありますか)。scalazで使用するための特別なキーボードレイアウトはありますか?
ベストプラクティスは何ですか?Unicode識別子を直接入力するか、ASCII置換を使用し、スクリプトを使用してコミット前にUnicode識別子に置き換えますか?
performance - より機能的な方法 (scalaz) で Scala を使用すると、パフォーマンス/保守性が低下しますか?
私は現在、主に純粋ですが、主に反復子に基づく可変最適化と、負荷の高い計算のためのデータ構造の再利用に依存する小さなプロジェクト (< 10k loc) に取り組んでいます。
私はもう少し関数型プログラミングを学びたいと思っています。たとえば、変更可能な計算を状態変換モナドなどにラップすることで、型の安全性を高めたいと思っています。この目的のために、scalaz ライブラリが存在します。
質問1
手の込んだ機能的なものをすべて使用して大規模な計算を抽象化する場合、取り除けないパフォーマンス キラーを導入するでしょうか? 私の計算がモナドの膝まで深く包まれているときのように?
質問 2
Scala の制限された型推論を考慮すると、それは実現可能でしょうか? 私は現在、非常に大きな型の署名と戦っています (おそらく、それらを適切に取り除く方法がわからないためです)。より「機能的」になると、そのような定型コードがさらに導入されると思います。
免責事項
関数型のアプローチが良いか悪いかは問いません。Haskell にこの質問をするのは無意味です。Scalaでそうするのが賢明かどうか疑問に思っています。
リクエストに応じて編集: 私のプロジェクトの大きなタイプの署名の例
(しかし、これは別の質問になります)
次のコードは、型パラメーター化された入力オブジェクト ( DiscreteFactorGraph[VariableType, FactorType[VariableType]]
) の反復計算を記述します。で計算オブジェクトを構築し、 で計算createInitialState
を実行しadvanceState
、最後に で情報を抽出できmarginals
ます。
因子グラフ オブジェクトの型 (およびそのパラメーターの型) を計算中に保持して、 の最終的な適用でmarginals
の正しい型が得られるようにしますDiscreteMarginals[VariableType]
。現時点では、変数の型を計算型 (つまり ) 内に保存するだけでよいと思いますTState
。そのため、因子の型を持ち歩くことは使用されません。しかし、別の場所では、 の型でさえDiscreteFactorGraph
可変である必要があるため、将来、計算を通じてより多くの型情報が必要になる傾向があります。
私はこの部分をいじっていましたが、より良い解決策があることを願っています。現在、私はかなり機能的なアプローチをとっており、これら 3 つの機能しかありません。しかし、それらを介して型をチェーンする必要があります。または、それをクラスとして定義し、それらすべての型でクラスをパラメーター化することもできます。そのため、メソッドごとに型パラメーターを繰り返す必要はありません。
scala - Scalaz の `F[_] : Applicative` 型制約はどのように暗黙のパラメータの使用を暗示していますか?
Traverse
Scalaz の traitの次の関数定義を理解するのに苦労しています:
def traverse[F[_] : Applicative, A, B](f: A => F[B], t: T[A]): F[T[B]]
わからない部分はF[_] : Applicative
.
さて、何が何であるか見てみましょうApplicative
:
ここで、 fortraverse
が何らかの type に対して機能するにF
は、 type の暗黙的なオブジェクトをApplicative[F]
スコープに入れる必要があります。
私はいくつかのことを理解したいです:
- どういう
F[_] : Applicative
意味ですか? F[_]
と関係があるのはなぜApplicative
ですか?Applicative[F]
F[something] extends Applicative じゃなくて が必要ですよね?Applicative[F]
このメソッドは、暗黙的なパラメーターを宣言せずに型の暗黙的な値を使用するのはなぜですか?
scala - Seq[Eith[A,B]] を [A,Seq[B]] に減らす方法は?
エラーメッセージSeq[Either[String,A]]
である一連のいずれかが与えられます。シーケンスのLeft
すべての要素Either[String,Seq[A]]
が. 少なくとも 1 つ(エラー メッセージ) がある場合、最初のエラー メッセージまたはすべてのエラー メッセージの連結を取得したいと考えています。Right
Seq[A]
Right
Left
もちろん、cats や scalaz のコードを投稿することもできますが、それを使用しないコードにも興味があります。
編集
Either[Seq[A],Seq[B]]
メッセージの本文を反映するために最初に要求されたタイトルを変更しました。