최근에는 NegativeLiterals
확장 프로그램이 사용 되는지 감지 할 수있는 Haskell 프로그램을 작성하는 것을 좋아했습니다 . 나는 다음을 생각해 냈다.
data B=B{u::Integer}
instance Num B where{fromInteger=B;negate _=B 1}
main=print$1==u(-1)
True
정상적으로 인쇄 됩니다 False
.
이제 나는이 일을하는 것이 너무나 즐거웠습니다. 어떤 다른 하스켈 언어 확장 프로그램을 사용할 수 있습니까?
규칙
당신이하고 언어 확장 (경고 괜찮) 출력 두 가지 않고 모두 컴파일 하스켈 프로그램을 작성해야합니다 특정 언어 확장 균열 이 아닌 오류 추가하여 (언어 확장으로 실행하고 해제 할 때 값을 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 점이 추가로 제공됩니다. 두 번째 요점은 이전 제출에 찬성하여 유대가 깨질 것입니다. 높은 점수가 좋습니다
당신은에 처음으로 제출 한 점을 득점 할 수 없습니다 NegativeLiterals
또는 QuasiQuotes
이미 그들을 금이 게시물의 몸에서 그들을 포함되어 있기 때문에. 그러나 각각의 가장 짧은 균열에 대한 점수를 얻을 수 있습니다. 여기 내 균열이 있습니다QuasiQuotes
import Text.Heredoc
main=print[here|here<-""] -- |]
NondecreasingIndentation
명백한 이유가 포함 되어 있지 않습니다.
Wait, what language extension is this?
아니면 전혀 다른 것이 어떻습니까 ?
RelaxedPolyRec
컴파일러를 끄는 것을 충분히 지원할 수있는 고대 컴파일러 입니다. 옵션은 문서화와 함께 몇 년 동안 아무것도하지 않고 중단되었습니다.