Haskellに言語/ DSLを埋め込んでいるため、if ... then ... else ...
のキーワードを削除したいと考えています。 if
,then
およびelse
は、多くのドメインで多くの意味を伝えています。言語/ドメインの性質を反映するために再定義する(または定義しない)のが良いと思います。Haskell(GHC)の "if ... then ... else ..."キーワードを削除するにはどうすればいいですか?
Googleとstackoverflowで検索しましたが、何も見つかりませんでした。 (私が古いスレッドを見つけたのは、if ... then ... else ...
がHaskellのキーワードに含まれていた理由です)
My IDEはLeksahにあり、キーワードを削除できれば、if ... then ... else ...
キーワードを通常のフォント/カラー/アンボールドに戻します。
私はすでにそうにif
ためif'
の命名規則を試してみましたが、しました。 は特にif
とif'
を定義し、if'
とif''
を代わりに定義する必要がある場合や、if1
とif2
と定義したい場合は、とよく似ていません。 if'
とif
の両方の存在も混乱する可能性があります。 (混乱は、DSLのユーザーがHaskellのプログラマーであるため、私の状況ではそれほど深刻な問題ではないが、他の状況では助けになると思う)。これまでの回答をまとめる
:
- はGHCへ
RebindableSyntax
拡張子を使用してください。キーワードを削除するほど一般的ではありません:Haskellのif-then-elseの構文はそのままです。 (Frerich Raabe) - 回避方法:
data Conditional b a = If b (Then a) (Else a)
(一部のコンテキストでのみ適用可能)を使用して、非常によく似た単語/名前を使用してください。 (C. A. McCann)
RebindableSyntax
が比較的新しい機能であれば、少なくとも次のバージョンのGHCまでは、もっと一般的な方法を見つけることはまずありません。
実際には、コンパイラがそれらを変数として扱うことができるように、キーワードの_remove_をしたいですか? – eternalmatt
あなたのDSLが周囲のHaskellとは十分に異なっていて、DSLに式を表す何らかの種類のデータ構造を作っている場合は、データ型を使うこともできます。たとえば、 '条件付きデータb a = bならば(a)(Else a)'のようなものである。 –
英語のようなコードを作成するようにDSLを設計すべきではないことを覚えておく必要があります。コードが機能しないかどうかを簡単に確認できるように設計する必要があります。 – Anonymous