Son zamanlarda, NegativeLiteralsuzantı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 Truenormal ve Falsebaş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 1ve -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. -OBayt 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 Nomeslektaşı (ö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 NegativeLiteralsya da QuasiQuotesben 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.
RelaxedPolyRecbir derleyici antik yeterli uzunlukta için, aslında kapatarak desteklemektedir. (Seçenek, belgeyle birlikte, bir şey yapmayı bıraktıktan birkaç yıl sonra