Çok satırlı dize değişmezleri içeren Haskell kodunda CPP uzantısını kullanmak mümkün mü? Haskell için başka şartlı derleme teknikleri var mı? ÖrneğinHaskell'de CPP uzantısı ve çok satırlı değişmezler
, en bu kodu alalım:
[1 of 1] Compiling Main (cpp-multiline.hs, cpp-multiline.o)
cpp-multiline.hs:4:17:
lexical error in string/character literal at character 'o'
GHC 6.12.1 kullanarak, cpphs mevcuttur: Ben {-# LANGUAGE CPP #-}
yorumsuz
-- If the next line is uncommented, the program does not compile.
-- {-# LANGUAGE CPP #-}
msg = "Hello\
\ Wor\
\ld!"
main = putStrLn msg
ardından GHC bir sözcük hata ile bu kodu yalanlıyor .
Ben cpphs.compat sarmalayıcı kullanarak ve -pgmP cpphs.compat
seçenek yardımcı olur, ancak ben özel kabuk komut bağlı değildir bir çözüm olsun isterim onaylamak. -pgmP cpphs
çalışmıyor.
P.S. GHC < 6.12 ve GHC> = 6.12 için farklı kod kullanmam gerekiyor, önişlemci olmadan mümkün mü?
UPD. Ganesh'in kabul edilen cevabına ek olarak, diğer bir geçici çözümün tüm koşullu bildirimleri {-# LANGUAGE CPP #-}
ile ayrı bir modülde koymak ve böylece çok satırlı dizeleri olan modüllerde CPP'den kaçınmak olduğunu öğrendim.
Neden "Hello" ++ "Wor" ++ "ld!" '? – kennytm
Çünkü "Merhaba \ whitespace + \ World!" 'Haskell 98'dir. Çünkü onu kullanan bazı kodlar vardır. Çünkü "++" 'daha fazla yer kaplıyor (ve 80 sütunun ötesindeki kodu beğenmiyorum). Son olarak, projedeki her çok satırlı dizeyi yeniden sarmadan ve yeniden biçimlendirmeden bir yama yazmak istiyorum. – sastanin