2013-03-07 36 views
11

Ghci'de etkileşimli olarak bir blok oluşturmaya çalışıyorum.Ghci'de bir izin bloğu içinde nasıl kullanılır?

Prelude>let a = do putStrLn "test"; putStrLn "other test" 
Prelude> 

ama etkileşimli bir ayrıştırma hatası almadan do bloğunda bir izin inşaat nasıl tanımlanacağı bilemiyorum: Sürece bloğunda bir değişken tanımlamak yok gibi gayet

Prelude> let a = do let b = 5; putStrLn $ show b 

<interactive>:2:40: 
    parse error (possibly incorrect indentation or mismatched brackets) 

Açıkçası

let a = do 
    let b = 5 
    putStrLn $ show b 

bir Haskell kaynak dosyada tamamen gayet iyi. Sadece bunu ghci'ye nasıl çevireceğimi bulmakta zorlanıyorum.

cevap

15

Dene:

ghci> let a = do {let b = 5; putStrLn (show b)} 

Hep nasıl çalışır satırlı bir yaklaşım, alabilir Bu:

let a = do let { b = 5 } ; print b 

let blok birden bildirimleri Eğer h öylesine içerebilir Yapıldıklarında GHCi'ye söylemek için ave - bu satırdaki parantezler budur.

Bu arada, putStrLn . show için print'u kullanabilirsiniz.

1

ben de parantez koyarak ince olacağını sanırdım ama bu ayrıştırmak değildir:

ghci> :{ 
ghci| let a = do let b = 5 
ghci|   putStrLn $ show b 
ghci| :} 
+1

': 1: 41: '}' girdisinde ayrıştırma hatası '}' 'hala –

+0

@ ДМИТРИЙМАЛИКОВ Evet, bu benim düzenleme hakkında ... –

+0

Ama hala başarısız oluyor –

12
:help 

<statement>     evaluate/run <statement>  
:{\n ..lines.. \n:}\n  multiline command 

Sen yazabilirsiniz: {bir satırlı komutu başlatmak için ve yazın:} bitirmeye.

Dolayısıyla, sadece

Prelude> :{ 
Prelude| let a = do 
Prelude|  let b=5 
Prelude|  putStrLn $ show b 
Prelude| 
Prelude| :} 

düzeni (girinti/boşluk) konusunda dikkatli olun yapmak. Aksi halde görünüşte doğru kodda ayrıştırma hataları alabilirsiniz.

Örneğin şu DEĞİL iş girinti yeterince derin olmadığı için olacaktır:

Prelude> :{ 
Prelude| let a = do 
Prelude| let b=5 
Prelude| putStrLn $ show b 
Prelude| 
Prelude| :} 

Böyle bir çözümleme hatası yol açacaktır:

<interactive>:50:4: parse error on input ‘let’ 
İlgili konular