最近、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
するのに十分なほど古いコンパイラーのために、クラックすることが可能かどうかは非常に興味があります。(オプションは何もしなくなってから数年間、ドキュメンテーションと共に