GHC'lerin lexically scoped type variables'unu kullanmak isterseniz, explicit universal quantification'u da kullanmanız gerekir. ölçümü ile ilgisiKapsamlı tür değişkenler, açık alan adları gerektirir. Niye ya?
{-# LANGUAGE ExplicitForAll, ScopedTypeVariables #-}
f :: forall a . [a] -> [a] -- The `forall` is required here ...
f (x:xs) = xs ++ [x :: a] -- ... to relate this `a` to the ones above.
bu aslında bir şey var mı, yoksa uzatma yazarlar sadece nereye için uygun bir işaretleyici olarak forall
anahtar kelime coopt vermedi: O senin işlevlerin tip imzalar için forall
bildirimleri eklemek zorunda olduğunu Yeni, geniş kapsam belirleme geçerlidir? Başka bir deyişle, neden forall
'u her zamanki gibi bırakamıyoruz? İşlev gövdesindeki ek açıklamalardaki tür değişkenlerinin, işlev imzasındaki aynı ada sahip değişkenlere başvurduğu açıkça görülmez mi? Ya da yazım bir şekilde sorunlu veya belirsiz olur mu?
Aşağıda kendi yanıtımı gönderdim, ama dikkate almadığım ek incelikler olup olmadığını merak ediyorum. ... – pash
Haskell-98'in kapsamı genişlemediğinden, yalnızca forall tarafından sunulan kapsam değişkenlerine sahip olmak bir uzlaşmadır. Bu şekilde eski kod, ScopedTypeVariables'ı açarken hala çalışır. (Muhtemelen, Haskell her zaman kapsamlı değişkenler içermelidir.) – augustss