Kullanım TypedHoles
adında. Yani bu sana verdiği
> let f x = _g . _h x $ x
Found hole ‘_g’ with type: b0 -> c
Where: ‘b0’ is an ambiguous type variable
‘c’ is a rigid type variable bound by
the inferred type of f :: s -> c at <interactive>:2:5
Relevant bindings include
x :: s (bound at <interactive>:2:7)
f :: s -> c (bound at <interactive>:2:5)
In the first argument of ‘(.)’, namely ‘_g’
In the expression: _g . _h x
In the expression: _g . _h x $ x
Found hole ‘_h’ with type: s -> s -> b0
Where: ‘b0’ is an ambiguous type variable
‘s’ is a rigid type variable bound by
the inferred type of f :: s -> c at <interactive>:2:5
Relevant bindings include
x :: s (bound at <interactive>:2:7)
f :: s -> c (bound at <interactive>:2:5)
In the expression: _h
In the second argument of ‘(.)’, namely ‘_h x’
In the expression: _g . _h x
_g :: b0 -> c
veo x :: s
ve f :: s -> c
bağlamında. Tip-kontrol edici, bu türlerin çoğunu bu zamana dönüştürebilir (bu, TypedHoles
'un noktasıdır) ve onlara isimleri verebilirsiniz. İsterseniz, tüm fonksiyonlarınızı _
sembolü ile sembol isminin ilk karakteri olarak tanımlayabilirsiniz, daha sonra 'u \1
ile değiştirmek için editörünüzü kullanın. Bir kayıt alanı için _name
kullanmanın lens sözleşmesi etrafında çalışmak istiyorsanız, o zaman sadece delik adınıza 2 alt çizgi koydu.
Bu, kodunuzun derlemesini yine de yapmaya devam edecektir, ancak bunu -fdefer-type-errors
ile birlikte kullanacaksanız, bunlar çalışma zamanında tür hatalarınızın oluşmasına izin verecek şekilde uyarı olarak bildirilecektir.
Sadece imzayı ve bu işlevler için bir '= undefined' yazmayı iyi bir uygulama olarak görüyorum ... ama, iyi bir soru, bazen fikirler için bu denemeye değer olduğundan emin değilim. onları ayrıştırmadıklarından, onları yazım denetimi yapmak için. – leftaroundabout
Doğru sözdiziminin doğru olup olmadığını kontrol etmenin bir başka yolu da "pointfree" gibi bir şey kullanmak ve "Ayrıştırma hatası: EOF" seçeneğini işaretlemektir, ancak bu, tek satırlı bir ifadeden daha fazlasını yapmakta zorlanır. – bheklilr
@leftaroundabout Benim durumumda, bir çözümleyici yapıyorum. Yani, yüzlerce * olmayan, mevcut olmayan tanımlayıcılar var, bunların hepsi parser olmalı. Sonunda tüm parçaları yazmayı bitirdiğimde işe yaramalı. Ama son noktaya gelmeden önce sözdizimi hatalarını yakalamak güzel olurdu ... – MathematicalOrchid