2010-02-22 13 views
5

Haskell'de satır numarası/geri bildirim bilgisi almanın bir yolu var mı? Haskell eşdeğeri C'nin __LINE__

(gibi C'ler __LINE__ makro veya Python en traceback.extract_stack())

O Haskell hat hangi C++ hat sorumludur yorumlar anlatımı ile notated olacağını C++ kodunu üretmektedir Haskell programı yazmak için benim için kullanım olacaktır.

Haskell örnek:

LINE "#include <foo.h>" -- this is line 12 
: INDENT "void Foo::bar() {" "}" 
    [ LINE $ "blah(m_" ++ x ++ ", \"" ++ x ++ "\");" 
    | x <- ["Potato", "Avocado"] 
    ] 

bu C++ kod oluşturur:

#include <foo.h>     // gen.hs:12 
void Foo::bar() {     // gen.hs:13 
    blah(m_Potato, "Potato");  // gen.hs:14 
    blah(m_Avocado, "Avocado");  // gen.hs:14 
}         // gen.hs:13 

cevap

14

Aslında Haskell CPP __LINE__ pragma kullanabilirsiniz. şartı başarısız olursa

{-# LANGUAGE CPP #-} 

main = do 
    print "one" 
    print __LINE__ 


$ runhaskell A.hs 
"one" 
5 

Ayrıca Control.Exception.assert işlevi satır numarasını yayacaktır.

import Control.Exception 

main = do 
    print "one" 
    assert False $ 
     print "two" 


$ runhaskell A.hs 
"one" 
A.hs: A.hs:5:5-10: Assertion failed 
+0

@dons: Awesome! Şimdi kullanıyorum ve bu çözümün nasıl göründüğünü yansıtmak için yukarıdaki kod pasajını değiştirdim. Güzel görünüyor! – yairchu