0
にマッチしますは、どのように私が持っているようなタイプ
infixr 9 |||
data a ||| b = A a|B b deriving (Eq, Data, Show)
class IsTag a where
anyTag :: a
と私は例えば、IsTag
のインスタンスであるこのa|||b
いくつかの値に保つ:A (B (A x))
- ネストの深いは任意のものとすることができる、確認してください。そして、x
がanyTag
と等しいことを検出する関数を書きたいので、a|||b
を返し、Bool
- xのインスタンスのanyTag
に等しい基本値(この例ではx
)を返します。どのようにそのような関数を書く? 「無限型」などのエラーでパターンマッチングを行うことができません。deriving Data
をa|||b
に追加し、xの型にData
のものを使用することを希望していますが、わかりませんそのような再帰型を介して倍/トラバースする。
書き込みできるコードの種類の最小限の完全な例を追加できますか?あなたが解決しようとしている実際の問題を説明するのに役立ちます。 –
[旅の始まり](https://stackoverflow.com/questions/47577470/read-of-types-sum)これは、一般的なread/match/showを持つさまざまな種類のタグを組み合わせたものです。すべてが良いですし、課題は解決しましたが、私は[tag1、tag2]や[tag1、anyTag](これは擬似コード)のようなタグにマッチするケースを区別する必要があります。場合)。ですから、タグタイプ( 'a ||| b')が' == anyTag'であるものを保持していることを確認する必要があります –