私はTemplate Haskellを学ぼうとしています。練習として、私はisLeft
とisRight
のようなものを生成する関数を書いた(this questionに触発されている)。
isA connam = do
ConE nam <- connam
nn <- newName "p"
lamE [varP nn] $ caseE (varE nn) [
match (conP nam [wildP]) (normalB [| True |]) [],
match wildP (normalB [| False |]) []
]
問題は、私が代わりにisA Left
より直感的なの$(isA [| Left |])
を書かなければならないということです。ここに私の謙虚な試みです。醜い構文を取り除くことは可能ですか?私はドキュメントでその答えを見つけることができないようです。
この関数は引数が1つのコンストラクタでのみ機能しますが、これはanother questionです。
ありがとうございました。私は間違いなくそれで生きることができます。 '$'はスプライスにはもはや必要ではないということをどこかで読んでいるのを覚えていますが、私はそれがどんな文脈であったか、あるいはここで適用できるかどうかはわかりません。 –
@ n.m。私はちょうど前に私の答えにそれを追加:)あなたはまだあなたのコメントを書いている間私の元の答えを表示していたと思います。 – hammar
ahaなので、 'isA 'Left'が実際の関数の代わりに' isALeft'という関数の宣言を生成したいのであれば、$を省略することができますか? –