在尝试学习Haskell时,出现的困难之一就是当某些东西需要来自编译器的特殊魔法时.记住的一个例子是seq无法定义的函数,即你不能使seq2函数的行为与内置函数完全相同seq.因此,在教某人时seq,你需要提到的seq是特殊的,因为它是编译器的特殊符号.
另一个例子是do-notation,它只适用于Monad类的实例.
有时,它并不总是显而易见的.例如,延续.编译器是否知道Control.Monad.Cont或者您可能是自己发明的普通的Haskell?在这种情况下,我认为即使延续是一种非常奇怪的野兽,编译器也不需要特殊的东西.
语言扩展被搁置,其他编译器魔术Haskell学习者应该注意什么?