問題タブ [pattern-synonyms]
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.
haskell - Haskell Bytestrings:パターンマッチの方法は?
私は Haskell の初心者で、パターン マッチの方法を理解するのに少し苦労していByteString
ます。私の関数の[Char]
バージョンは次のようになります。
予想どおり、これにより、文字列から「ab」のすべての出現が除外されます。ただし、これをに適用しようとすると問題が発生しますByteString
。
素朴なバージョン
収量
[]
String
ではなく通常の場合であるため、明らかに犯人ByteString
です。Subbing inBS.empty
は正しいことのように思えますが、「結合位置の修飾名: BS.empty」が表示されます。試してみましょう
これにより、 の「パターンの解析エラー」が発生します(x cons empty)
。ここで他に何ができるか本当にわかりません。
補足として、私がこの関数でやろうとしているのは、テキストから特定の UTF16 文字を除外することです。それを達成するためのきれいな方法があれば、私はそれを聞きたいと思っていますが、このパターンマッチングエラーは初心者の haskeller が本当に理解しておくべきもののようです.
haskell - Haskell 型コンストラクターの等価性を定義しますか?
私は式のメンバーとして意味していません。私のコード:
この場合、私はインスタンスを定義します(MU Terran Zerg)
。TvZ
関数パターンを一致させることができるように、インスタンスのすべての面で本質的に同一のデータ コンストラクターを作成したいと考えています。
する代わりに
次のように変数に割り当てるとできませんtvZ = (MU Terran Zerg)
私がやりたいもう 1 つのことは、型コンストラクターT
とTerran
同一を作成する場合と同様に、短い形式を作成することです。
最後に、メディバックのスピード ブーストには少しナーフが必要だと思います。
haskell - Haskell コンストラクターのエイリアス
Haskellで「コンストラクタエイリアス」を作成するのと同等のものを持つ方法はありますか? タイプに別の名前を付けることができるタイプエイリアスと同様に考えていますが、エイリアスされたタイプとしてあらゆる点で動作します。
私のユースケースは、モデリングしているいくつかのオブジェクトのプロパティとして割り当てられた時間を持っているシステムですUTCTime
。これらのいくつかは「可変」時間である可能性があります。つまり、まだ時間が割り当てられていないか、割り当てられている時間が「可動」である可能性があります。だからMaybe UTCTime
。
ただし、一部のオブジェクトのみが可変時間です。他のものは、システムが定数として取らなければならない固定時間を持っています。現在特定の時間に割り当てられている時間変数は、固定時間と同じように処理されません。これは今示唆していEither UTCTime (Maybe UTCTime)
ます; 割り当てられていない固定時間または可変時間のいずれかです。
ジェネリック型は、私がモデル化しようとしているものに非常によく適合しているように見えるので、それらを使用するのは自然なことです。しかし、 が何であるかは明らかEither UTCTime (Maybe UTCTime)
ですが、それが何を意味するかは特に明白ではないため、説明的な特殊なケースの名前が適しています。
simpletype Timeslot = Either UTCTime (Maybe UTCTime)
は間違いなく私の型シグネチャを大幅にクリーンアップしますが、コンストラクターには何もしません。値を構築bound = Just
するための名前を取得するようなものを使用できますが、パターン マッチングには使用できません。
もう一方の端では、任意の名前でカスタム ADT を定義できますが、定義済みのEither
およびMaybe
タイプの機能がすべて失われます。というか、常に変換を前後に適用します (これはnewtype
、効率の保証がない場合にのみ、物事にラッパーを使用する状況よりも悪くないと思いますが、とにかくこれがボトルネックになるとは思えません)。そして、ジェネリック関数Either
とMaybe
関数を使用して値を操作するコードを理解Timeslot
するには、標準コンストラクターがとにかく使用したいものにマップされる方法を知る必要があり、変換関数は、そのマッピングの便利なコンパイラー強制定義を提供します。 . 結局のところ、これは良いアプローチかもしれません。
Haskell については、コンストラクターのエイリアシングのようなものは存在しないと言えるほどよく知っていると確信していますが、私が知らないハックや、この状況を処理する他の良い方法があるかどうかに興味があります。
haskell - Haskellで多くの定数を処理するには?
私は、開発者が Minitel (フランスの videotex 端末) を制御できるようにするライブラリに取り組んでいます。
多くの定数値があり、Haskell でそれらを管理する最良の方法を知りたいです。初心者の間でよくある質問ですが、満足のいく答えが見つかりません。
私のプロジェクトを見ることができます (注:はい、1つのモジュールだけに定数が多すぎます。それが私が取り組んでいることです;-))
現在、モジュールを として保持していますname = value
。うまくいきますが、完璧にできるかどうか、または正しく行っているかどうかを知りたいです。
この方法には小さな欠点があります。パターン マッチングを使用できないため、名前を保持したい場合はガードを使用する必要があります。
GHC が署名の欠落や型のデフォルトについて怒鳴りつけたくない場合は、GHC オプションも使用する必要があります。
未定義の値を補正するトリックを使用して試したことはdata deriving Enum
ありますが、値が 0 から始まらないとすぐに見苦しくなります。また、エラーが発生しやすく、1 つの値を省略または追加すると、次の名前の値がプラスまたはマイナスになります。マイナス 1:
このソリューションには欠点があります。リスト内の値は異なる型であるため、簡単に混在させることはできません。
別の解決策を考えました:
このソリューションでは、コンストラクターが重複しないように注意する必要があります。たとえば、NUL、SO、および SI は、ASCII と C0 の両方に存在します (幸いなことに、それらは同じ値を与えます :-) )。たとえば、ASCIIで定義するだけでケースを処理できます。修飾されたインポートを使用すると、物事が醜くなります ( ASCII ASCII.NUL
)。
このケースを処理するための他のより良い方法はありますか?
list - 「Nil」が値を持つリスト?
一部の標準 Haskell ライブラリは、このようなデータ型を定義していますか?
それは、指定された型の値を持つ終端要素を持つリストですか?
ListWithEnd ()
は無限ストリームに同型で[]
ありListWithEnd Void
、無限ストリームに同型です。または、別の見方をすると、ListWithEnd e a
非常に近いConduitM () a Identity e
..
haskell - Haskell で比率に対してパターン マッチができないのはなぜですか?
私は比率に対してパターンマッチをしようとしています:
ただし、これにより次の結果が得られます。
興味深いことに、Data.Ratio
パッケージはnumerator
anddenominator
関数をこのように定義しますが、:%
演算子を使用します。
ただし、この後者のオペレーターにはアクセスできません。
パターンマッチが機能しない理由と、それを修正する方法を誰か説明できますか?