Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

A toy example would be the following C code

    #include <math.h>
    
    double sine(double x){
      reformat_hard_drive();
      return sin(x);
    }
which can be easily translated to Haskell

    sine x = do
      reformat_hard_drive
      return (sin x)
So we can write the same stupid function in both languages. The bit that's specific to Haskell, as opposed to just any typed language, is that sine and sin have different types. sin is (Double -> Double) while sine is (Double -> IO Double), so swapping in sine for sin causes the code to fail to compile. Comparatively, you can drop in a random sine anywhere in your C code and the compiler will happily chug right along. While I've seen ways of implementing various invariant catching techniques like the Maybe type in C, I haven't seen anything that would catch the sine function.

Now, as I said, this is a toy example. The real solution would be to fire whoever wrote the sine function. However, in larger systems, it can be translated into invariants such as declaring that a function cannot access the database or send packets on the network.



Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: