जब मैं रैंकेंटाइप का उपयोग करता हूं, ऐसा लगता है कि (।) ऑपरेटर अच्छी तरह से काम नहीं करता है। इस सीमा को कहां दस्तावेज किया गया है?रैंकेंटाइप और डॉट ऑपरेटर
{-# LANGUAGE RankNTypes, ImpredicativeTypes #-}
f :: Int -> (forall r. r -> r)
f = undefined
g :: (forall r. r -> r) -> Int
g = undefined
h :: Int -> Int
-- h v = g (f v) -- It works well
h = g . f -- I can't write it in this way
मुझे निम्न त्रुटियां मिलती हैं।
[1 of 1] Compiling Main (test.hs, interpreted)
test.hs:11:9:
Couldn't match type ‘r0 -> r0’ with ‘forall r. r -> r’
Expected type: Int -> forall r. r -> r
Actual type: Int -> r0 -> r0
In the second argument of ‘(.)’, namely ‘f’
In the expression: g . f
Failed, modules loaded: none.
यह विशेष रूप से '.' के साथ बहुत कम नहीं है, यह सामान्य है कि सामान्य उच्च-रैंक प्रकार_ के साथ स्वचालित रूप से स्वचालित प्रकार का अनुमान संभव नहीं है। – leftaroundabout
@ बाएंअराउंडबाउट, अनुमान कैसे संबंधित है? बिडरेक्शनल टाइप चेकिंग + एकीकरण को इस मामले को कवर करना चाहिए। Agda कम से कम [खुश] (http://lpaste.net/137326) है। – user3237465