最近、NegativeLiterals拡張機能が使用されているかどうかを検出できるHaskellプログラムを作成することができました。私は次のことを思いつきました:
data B=B{u::Integer}
instance Num B where{fromInteger=B;negate _=B 1}
main=print$1==u(-1)
これはTrue正常に印刷され、Falseます。
今、私はこれをするのがとても楽しかったです。私はあなた全員に挑戦を広げています。他にどのHaskell言語拡張機能をクラックできますか?
ルール
特定の言語拡張をクラックするには、言語拡張ありとなしの両方でコンパイルし(警告は問題ありません)、言語拡張を使用して実行したときに2つの異なる非エラー値を出力するHaskellプログラムを作成する必要があります(Noプレフィックスを追加することにより)言語拡張機能)。このようにして、上記のコードを次のように短縮できます。
data B=B{u::Integer}
instance Num B where{fromInteger=B;negate _=B 1}
main=print$u(-1)
印刷し1、-1ます。
拡張機能をクラックするために使用する方法は、その拡張機能に固有のものでなければなりません。コンパイラフラグまたはLanguageExtensionsが有効になっている場合、そのようなメソッドが許可されていない場合、任意に検出する方法があります。追加の言語拡張を有効にするか、次を使用してコンパイラの最適化を変更できます。-O、バイトカウントを無料でしできます。
言語拡張
あなたは持っていない任意の言語拡張割れることができないNo相手方(例えばHaskell98、Haskell2010、Unsafe、Trustworthy、Safeこれらは、上で概説条項に該当しないために)。他の言語拡張機能はすべて公平なゲームです。
得点
あなたが最初にクラックする言語拡張機能ごとに1ポイント、最短(バイト単位で)クラックするすべての言語拡張機能に1ポイント追加されます。2番目の点については、以前の提出を支持して関係が破られるでしょう。スコアが高いほど良い
最初の投稿でポイントを獲得することはできません。NegativeLiteralsまたはQuasiQuotes、既にそれらをクラックして投稿の本文に含めているためです。ただし、これらのそれぞれの最短クラックのポイントを獲得できます。ここに私の亀裂がありますQuasiQuotes
import Text.Heredoc
main=print[here|here<-""] -- |]
NondecreasingIndentation明白な理由が含まれていないことに注意してください
Wait, what language extension is this?うか、まったく違うものです。
RelaxedPolyRecするのに十分なほど古いコンパイラーのために、クラックすることが可能かどうかは非常に興味があります。(オプションは何もしなくなってから数年間、ドキュメンテーションと共に