Haskell ile deneme yapmaya başladım ve bir problemim var. qqq, "Hiçbir şey" ile çağrılırsa bir dizgi basması ve "Sadece bir şey" ile çağrılırsa başka şeyler yazdırması gereken bir işlevdir.Haskell'in Kullanımı "Belki", bildirimler yazın [beginner soru]
qqq Nothing = print "There isn't anything to be printed."
qqq (Just x) = print "There is something to be printed." >> print x
main :: IO()
main = qqq (Just 43)
Ama:
ilk girişim çalışma gibi görünüyor
- Ben başarısız
main = qqq (Nothing)
yapmaya ("Muğlak tip kısıtlaması içinde değişken` a0' : (Göster a0) Ben türü imza eklemek istediğinizde 'qqq'ait' ") bir kullanımından kaynaklanan - başarısız olursa:
-
qqq :: Maybe x => x -> IO()
->Type constructor 'Maybe' used as a class
-> Ama öyle değil mi?
-
qqq :: (Maybe x) -> IO()
. Şimdi imzanın kendisi başarılı gibi görünüyor. Ancakmain = qqq (Just 43)
,main = qqq (Nothing)
örneğinde olduğu gibi gizemli(Show a0)
hatasıyla başarısız oluyor.
Sorular:
Nothing
ile qqq çağıran
Just 43
ile arayarak daha çok farklı neden
- ?
(Show a0)
nedir? Sadece hata mesajlarında belirtilmiştir. Bunu kullanmak için herhangi bir girişimi "kapsamda gösterme" gibi bir şeye yol açar.- Bunun için doğru tip imzası nedir? Haskell baskı tipi imzası nasıl sonuçlandırılır? Bekleniyor gibi bir şey:
f 0 = 2
f x = (f (x-1)) + 3
main = print get_type_as_string(f)
-- prints "Number -> Number"
Ayrıca, "Neden hiçbir şey ayarlayamıyorum ghci, bu ayrıştırma hatası '=" ' –
Olduğunu" belirsiz bir soru "belirsiz" her zaman Haskell başarısız veya karar verebilir "türü Burada önemli, bazen belirsiz olsun "bazen? –
Haskell, derleyici ne yapacağını bilmediğinde belirsiz türlerden şikayetçidir. Yani derleyici türün ne olacağını öğrenebilirse, sorun yok, ancak tür hakkında yeterli bilgi olmadan türetilmiş olması gerekiyorsa, hatayı alırsınız. – Antti