Son zamanlarda, NegativeLiterals
uzantının devreye girip girmediğini tespit edebilecek bir Haskell programı yazma zevkim oldu. Aşağıdakilerle geldim:
data B=B{u::Integer}
instance Num B where{fromInteger=B;negate _=B 1}
main=print$1==u(-1)
Bu True
normal ve False
başka şekilde yazdırılır .
Şimdi bunu yaparken çok eğlendim, hepinize meydan okuyorum. Başka hangi Haskell dil uzantılarını çözebilirsiniz?
kurallar
Belirli bir dil uzantısını kırmak için, dil uzantısına sahip olan ve olmayan (uyarılar iyidir) derleyen ve dil uzantısıyla çalıştırıldığında kapatılan iki farklı hata değeri veren ve kapatılan (bir No
önek ekleyerek ) bir Haskell programı yazmalısınız . dil uzantısı). Bu şekilde yukarıdaki kod kısaca kısaltılmış olabilir:
data B=B{u::Integer}
instance Num B where{fromInteger=B;negate _=B 1}
main=print$u(-1)
hangi baskılar 1
ve -1
.
Bir uzantıyı kırmak için kullandığınız herhangi bir yöntem bu uzantıya özgü olmalıdır. Hangi derleyici bayraklarının veya LanguageExtensions'ın etkin olduğunu, bu tür yöntemlere izin verilmiyorsa keyfi olarak tespit etmenin yolları olabilir. -O
Bayt sayınıza ücretsiz olarak ek dil uzantılarını etkinleştirebilir veya derleyici optimizasyonunu değiştirebilirsiniz .
Dil uzantıları
Bir yoktur herhangi bir dil uzatma kıramazlar No
meslektaşı (örneğin Haskell98
, Haskell2010
, Unsafe
, Trustworthy
, Safe
), bu yukarıda özetlenen şartlar altında düşmez çünkü. Diğer her dil uzantısı adil bir oyundur.
puanlama
İlk kırılan her dil eklentisi için bir puan ve en kısa (bayt cinsinden ölçülen) çatlağa sahip olduğunuz her dil uzantısı için bir ek puan alacaksınız. İkinci noktaya göre, bağlar daha önceki başvuruların lehine kopacak. Yüksek puan daha iyi
İlk gönderim için puan kazanamayacaksınız NegativeLiterals
ya da QuasiQuotes
ben zaten onları kırdım ve gönderinin gövdesine ekledim. Bununla birlikte, bunların her birinin en kısa çatlağı için bir puan kazanabileceksiniz. İşte benim çatlakQuasiQuotes
import Text.Heredoc
main=print[here|here<-""] -- |]
NondecreasingIndentation
Wait, what language extension is this?
ya tamamen bambaşka bir şey.
RelaxedPolyRec
bir derleyici antik yeterli uzunlukta için, aslında kapatarak desteklemektedir. (Seçenek, belgeyle birlikte, bir şey yapmayı bıraktıktan birkaç yıl sonra