問題タブ [scalaz7]
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 - Applicative functor |@| による Scalaz Validation 動作していません
アプリで Scalaz 7 Validation を使用しようとしています。しかし、|@|
Applicative functor で失敗を合体させるのに問題があります。ここに私が持っているコードがあります:
および関数は単に を返しminValidate
ます。sizeValidate
ValidationResults
問題は、このコードがコンパイルされないことです。エラーメッセージは次のとおりです。
それが何を意味するのかわかりません... Scalaにもっと型情報を与える必要がありますか?
私が達成しようとしているのは、すべてのフィールドが s の場合はそれを返し、それ以外の場合はすべてのs のsuccessNel
組み合わせを返すことです。failureNel
|@|
以前のバージョンの Scalaz から変更されましたか? 私が次のようなことをしても:
同じエラーが発生します。
アップデート
Scalaz のソースを調べてみたところ、自分の+++
やりたいことを実行しているように見える が見つかりました。
+++
とはどう違い|@|
ますか?
scala - EachT と Future の組み合わせ
さまざまなバックエンド システムに対して多くの呼び出しを行うアプリがあり、for 内包表記を使用してバックエンド システム全体のプロセス フローを簡素化したいと考えています。
私は、EitherT (scalaz) と Future (scala 2.10) を組み合わせて、最初の潜在的なエラー (未来またはバックエンド システムの問題) を捕捉し、適切なメッセージをエンド ユーザーに返すことができるようにしようと考えています。私は scalaz Validation をざっと見てきましたが、すべてのエラーではなく最初のエラーをキャプチャするための推奨事項は、EitherT を使用することです。
最初にREPLで簡単な例を試していますが、次のエラーが発生しています
エラー: パラメータ F の暗黙的な値が見つかりませんでした: scalaz.Functor[scala.concurrent.Future]
私はまだscalaとscalazの両方に慣れていないので、どんなポインタでも素晴らしいでしょう。
** アップデート **
@stew の提案に基づいて scalaz-contrib を含めることにより、さまざまな単純なユースケースのバックエンドの成功、バックエンドの失敗、および将来の失敗を示す、EitherT と Future を組み合わせた for 内包表記を示す更新バージョンができました。
scala - Scalaz: バリューレンズでマップレンズを構成する方法は?
ここに Scalaz マップ レンズの例があります: Dan Burton はそれcontainsKey
を と呼んでおり、Edward Kmett の講演に触発されています。Scalaz 7 で呼び出さmapVPLens
れ、マップの値を変更するのに役立つものもあります。
私の質問は、 type を変更するためV
のレンズと a のためのレンズがある場合Map[K,V]
、どうすればそれらを構成できますか? 私は良い単純な例をしばらく探していましたが、Scalaz にはまだ例が不足しています。
Scalaz 6 と Scalaz 7 の両方のソリューションに興味があります。
scala - 型推論と 2 つの型パラメーターで Scalaz を支援する方法
私は a と呼ばれるものを持っていますGenerator
:
Bind
このジェネレーターのインスタンスを提供できます。
残念ながら、ジェネレーターを適用可能なインスタンスとして使用しようとすると、型の推論は完全に失われます。
Generator
今のところ私の唯一の回避策は、オブジェクトに特殊なメソッドを追加することです。
次に、これをコンパイルします。
この問題の回避策はありますか? State[S, A]
asを使うと同じような問題が生じるからだと思いますMonad
(しかし、Scalaz では に対して特別な扱いがあるようですState
)。
scala - Scales Xml (Scala) を使用した Big XML の解析、機能的な方法 - Zippers を使用した StackOverFlowError
久しぶりの潜伏者、初めてのポスター。私の質問が明確でない場合はお知らせください。
解析する必要があるちょっと変わった XML ファイルがあります (クラス内にデータを入れて、内部で処理します)。ネストされるべきだと誰もが通常考えるものは、そうではないので、私はそれが奇妙だと言います。例を挙げましょう:
ファイルには、数万のアイテムが続きます。データをまったく含まないアイテムもあれば、何も入っていないデータ タグもあります。
これをどのように解析するかについては完全な自由が与えられました。私は Scala をマスターしようとしているので、タスクを解決するために Scala を選択しました。以前は StAX (Apache AXIOM) を使用してプル解析を行っていましたが、Scala で同様のものを探していたところ、Scales を見つけました。ここまでは順調ですね。
使用:
- スカラ 2.10.2
- スケール 0.4.5
必要なのは、各タグのコンテンツと属性だけでなく、各タグの生のコンテンツです。たとえば、上記の XML では、「top」タグに次のようなものがあります。
rawContent は次のようになります。
同じことが「データ」タグにも当てはまりますが、データがネストされていないため、プル解析によって XmlPull が Iterator[PullType] に過ぎないことを考えると、タグを解析してノードをトラバースするというアイデアが生まれました。終了タグが見つかるまで、または「data」タグの場合は、別の「data」開始タグまたは「item」終了タグが見つかるまで。しかし、どう考えても状態の保存は避けられません。
ジッパーでやってみることにしました。
まず、特定のタグが見つかるまでトラバースし、その間に見つかった各要素で何かを行う必要があるため、findBy を試しています。以下は私が今試しているコードです。指定されたタグの属性とその中のすべての生のコンテンツを取得しようとします。
このコードは「top」タグで機能しますが、「item」タグで試してみると、StackOverFlowError が発生します。
少し調査を行って、それが関連しているかどうか確信が持てなかったので、Scales が Scalaz 6.0.4 を使用していることがわかりました。そこでは、Zipper.findBy は tailrec ではありませんが、(少なくともそれが使用する内部関数は) Scala 7。しかし、依存関係を 7.0.4 に変更すると、Scalaz 6 から 7 への Iteratee への変更により、Scales から多くのエラーが発生します (同じ場所にないいくつかの参照)。
私の質問:
- 私はすべてのプロセスを過度に殺していますか?このタスクに取り組むために取るべきもっと簡単なアプローチは他にありますか?
- このまま続けていく場合、何か気を付けることはありますか?Scalaz 7 でスケールを使用する方法はありますか?
備考:
- 特に Java での、強力な命令型プログラミングのバックグラウンド。
- 以前に Scala を使用したことがありますが、(今回のように) 行き詰まり、時間がかかるため、多くの場合、命令型の方法に戻らなければなりません。
- 私は以前に Scalaz を使ったことがありません。関数型プログラミングに関する私の知識は基本的なものですが、新しいことを学ぶのはとても楽しいですし、関数型プログラミングが好きです。