Comment by lmm

12 years ago

> All of the dependently typed languages, like Coq, that I've seen have not been very good programming languages, in my opinion.

Yeah, that's why I'm looking at Idris - it seems like the only one that's oriented towards practical programming. I did eventually get it installed, but it's tough going doing anything with it when you don't know Haskell tbh.

> Idris - it seems like the only one that's oriented towards practical programming

Whether you like ATS or not, it's very oriented towards practical programming. Also, ATS mostly looks bad IMO because of the style the author uses.

I still haven't fully formed an opinion on ATS though. Idris does seem really cool and stuff like enforcing time/space usage through the type system excites me.

  • I'm not sure whether my issue with ATS is the style of the author or its type system, although I suspect the former.

    ATS is based on ML (the author started with Dependent ML), but the code has a very imperative feel, leading to statements like "let () = expr() in ..." and "let x = ... in ()".

    The stuff at http://www.ats-lang.org/Examples.html is just hideous, by the way.

    • Here's just a small translation of the ats examples[0] page.

      ----------------- Copying File ----------------

      Authors version:

          fun
          fcopy (
            inp: FILEref
          , out: FILEref
          ) : void = let
            val c = fileref_getc (inp)
          in
            if c >= 0 then let
              val () = fileref_putc (out, c) in fcopy (inp, out)
            end // end of [if]
          end (* end of [fcopy] *)
      

      ----------------- Naieve Fibonacci ----------------

      My version:

          fun fcopy ( 
            inp: FILEref,
            out: FILEref
          ) : void = let
            val c = fileref_getc (inp)
          in
            if c >= 0 then let
              val () = fileref_putc (out, c) in fcopy (inp, out)
            end 
          end 
      

      Authors version:

          fun
          fib (
            n: int
          ) : int =
            if n >= 2 then fib (n-2) + fib (n-1) else n
      

      My Version (not sure if valid!):

          fun fib ( n: int ) : 
            int = if n >= 2 then fib (n-2) + fib (n-1) else n
      

      ----------------- Fast Fibonacci ----------------

      Authors Version:

          fun
          fibc (
            n: int
          ) : int = let
            fun loop (n: int, f0: int, f1: int) =
              if n > 0 then loop (n-1, f1, f0+f1) else f0
            // end of [loop]
          in
            loop (n, 0, 1)
          end // end of [fibc]
      

      My Version:

          fun fibc ( n: int ) : int = 
            let
              fun loop (n: int, f0: int, f1: int) =
                if n > 0 then loop (n-1, f1, f0+f1) else f0
            in
            loop (n, 0, 1)
          end
      

      0: http://www.ats-lang.org/Examples.html