Bu benim -Wall
kullanarak, GHC kapsamlı olmayan desenleri karşı uyarabilir anlıyoruz Why am I getting "Non-exhaustive patterns in function..." when I invoke my Haskell substring function?Haskell'de, kapsamlı olmayan modeller neden derleme zamanı hataları değildir?
bir devamı niteliğindedir.
f :: [a] -> [b] -> Int
f [] _ = error "undefined for empty array"
f _ [] = error "undefined for empty array"
f (_:xs) (_:ys) = length xs + length ys
soru GHC özgü değildir: Ben açıkça kısmi işlevi tanımlamak için her zaman mümkün olduğunu verilen varsayılan bir derleme zamanı hatası yapmıyor sebebi ne merak ediyorum.
- kimse bu tür bir analiz gerçekleştirmek için bir Haskell derleyicisi uyulmasını istedi o ... çünkü mı?
- Kapsamlı olmayan bir desen araması, bazı durumlar değil, bazılarını bulabilir mi?
- Kısmen tanımlanmış fonksiyonlar meşru kabul edilir ve yukarıda gösterilen yapı tipini dayamayacak kadar sıklıkla kullanılırlar. Eğer durum buysa, ayrıntılı olmayan modellerin neden yararlı/meşru olduğunu açıklayabilir misiniz?
Başka bir yaygın durum, bir bekçi/davanın/şubenin içinde lambda ifadeleri olacaktır. Argümanın içinde bulunduğunuz branştan dolayı belirli bir formu olduğunu biliyorsunuz, bu yüzden lambda dahil olmak gereksizdir. –
Aksi halde yazılması gerektiğini düşünmüyorum. Derleyici, non-exahustive olduğunu düşünüyor olsa bile, harika bir mod2 tanımıdır. Bu soruya geldim çünkü negatif tamsayılar için tanımlanmaması gereken bir fib fonksiyonu yazarken bu hatayı aldım. –
belki bu kapsam dışıdır, ancak bir desen eşleşmesinin zorlayıcı olup olmadığını veya durma problemiyle ilişkili olmadığına karar veriyor? sezgisel olarak, bu tür analizleri en azından dilin alt kümeleri için kullanması gerektiği gibi kesin bir şekilde yazılmış bir dil gibi görünüyor, ama bağırsak içgüdülerinin genellikle bir şeyin hesaplanabilir olup olmadığını tahmin etmenin korkunç bir yolu olduğunu biliyorum. – kai