का कारण बनता है जब मैं GHC 7.4.1 के अंतर्गत निम्नलिखित कोड को लोड करने का प्रयास करें:newtype प्रकार की त्रुटि
{-# LANGUAGE RankNTypes #-}
import Control.Monad.ST
newtype M s a = M { unM :: ST s a }
runM :: (forall s. M s a) -> a
runM (M m) = runST m
यह निम्न संदेश के साथ विफल रहता है:
test.hs:9:14:
Couldn't match type `s0' with `s'
because type variable `s' would escape its scope
This (rigid, skolem) type variable is bound by
a type expected by the context: ST s a
The following variables have types that mention s0
m :: ST s0 a (bound at test.hs:9:9)
In the first argument of `runST', namely `m'
In the expression: runST m
In an equation for `runM': runM (M m) = runST m
ऐसा क्यों असफल होता है, जब M
ST
के आसपास सिर्फ एक रैपर है?
(। मेरे वास्तविक कार्यक्रम शीर्ष – पर खड़ी कुछ ट्रांसफार्मर यह सिर्फ एक न्यूनतम मामला है)
संपादित:
runM m = let M m' = m in runST m
: यह एक
let
फिक्स मुद्दा जोड़ने लगता है
हालांकि, अगर TypeFamilies
सक्षम है (जैसा कि यह मेरे वास्तविक कोड में है), यह फिर से विफल हो जाता है।
मुझे विश्वास है कि ऐसा इसलिए है क्योंकि – jozefg
क्या है? –
क्षमा करें, मैंने अपनी खुद की परिकल्पना को अस्वीकार कर दिया :( – jozefg