7
İşte ibrenin uyum dönmek için basit bir fonksiyon var:ScopedTypeVariables kapsam içine tipi değişkenleri getirmiyor
{-# LANGUAGE ScopedTypeVariables #-}
import Foreign.Ptr (Ptr)
import Foreign.Storable (Storable, alignment)
main = return()
ptrAlign1 :: (Storable a) => Ptr a -> Int
ptrAlign1 _ = alignment (undefined :: a)
Ama aşağıdaki hatayı alıyorum: Ben ptrAlign
yeniden Eğer
Could not deduce (Storable a0) arising from a use of `alignment'
from the context (Storable a)
bound by the type signature for
ptrAlign1 :: Storable a => Ptr a -> Int
at prog.hs:8:14-41
The type variable `a0' is ambiguous
Bunun gibi bir daha dağınık hizip:
ptrAlign2 :: (Storable a) => Ptr a -> Int
ptrAlign2 = ptrAlign3 undefined where
ptrAlign3 :: (Storable a) => a -> Ptr a -> Int
ptrAlign3 x _ = alignment x
O ince (tabi bu sürümü işleri ScopedTypeVariables
'a bile ihtiyaç duymaz.
Ama hala ilk sürümün neden hata yaptığını merak ediyorum ve bunu çözmek için ne yapılabilir? ScopedTypeVariables
açık
bu arkasındaki mantık nedir, bunları açıkça ölçmek sürece kapsamında koymak değil mi? –
@ErikAllik: [El kitabı] (https://downloads.haskell.org/~ghc/latest/docs/html/users_guide/other-type-extensions.html#scoped-type-variables) Var olan kodun davranışının sadece 'ScopedTypeVariables' özelliğini açarak değiştirmemesini bekliyorum. –