150 likes | 249 Views
Introducing HaskellLight Compiler Framework by Rijk-Jan, Arjan, Daan, Martijn L. Goal is to teach Haskell with precise error reporting, no classes, simplicity, and extreme testing. Highlights include precise error positions, warnings, hints, and fast, small, and portable compiler. Examples of error reporting in Hugs and Helium are provided along with implementation details for fast, small, portable code. Helium aims to be the future of Haskell for education.
E N D
Introducing HaskellLight Rijk-Jan, Arjan, Daan, Martijn L.
Goal • Teaching • “Compiler framework” Haskell
Language Haskell Error reporting No classes Compiler Simplicity Error reporting eXtreme testing Design
Highlights • Precise positions of errors • Warnings • Hints (type errors, undefined var.) • Still fast, small and portable
Position f = 3 x = 3 f = 4 • Hugs: • ERROR Main.hs:1 - "f" multiply defined • Where is the other definition? • Helium: • (1, 1), (3, 1): duplicated function "f"
Warnings f id = id 3 id x = x • Which “id” was meant? • Hugs • Silent • Helium • (1, 3): variable "id" shadows the one at (3, 1)
Warnings • Unused parameters/functions... • No type definition • Unreachable code (in case)
Hints map f xs = case xs of []->[] y:ys->map ys • ERROR Main.hs:1 – Type error in function binding*** Term : map*** Type : c -> [a] -> [b]*** Does not match : [a] -> [b] • (4, 11): type error in rhs of case: map ystype: b -> cprevious rhs’s: [a]Probably too few arguments to 'map' in this right-hand side
Code speed GHC 5 x Helium 60 x Hugs
Implementation Lexer Lazy Virtual Machine (Daan Leijen) Parser ToCore Static Analysis Type Checker
Not yet modules where, lambda Float, tuples pattern-matching nested patterns comprehensions FFI (Java), GUI, IDE, interpreter “Never” classes Double, Integer records Future of Helium
Conclusion • Helium is Haskell-- with nice error messages • Helium will be “textbook Haskell” • Helium will hopefully some day be used in education