2016-02-24 10 views

cevap

6

mümkün değil. with ile size desen maç bağlam içinde tipleri eşleşti yapıcı çıkarılan bilgilerle güncellenir zaman. case böyle bir güncelleştirmeye neden olmaz. with ile değil case ile Örnek olarak

aşağıdaki çalışır: cevap Andras için

import Data.So 

-- here (n == 10) in the goal type is rewritten to True or False 
-- after the match 
maybeTen : (n : Nat) -> Maybe (So (n == 10)) 
maybeTen n with (n == 10) 
    maybeTen n | False = Nothing 
    maybeTen n | True = Just Oh 

-- Here the context knows nothing about the result of (n == 10) 
-- after the "case" match, so we can't fill in the rhs 
maybeTen' : (n : Nat) -> Maybe (So (n == 10)) 
maybeTen' n = case (n == 10) of 
    True => ?a 
    False => ?b 
+0

çok teşekkürler. – jhegedus

+0

Yani temelde 'with' basit daha tip düzeyinde bir "güçlü" bağlantısı vardır case'' bir tür 'case' sahiptir. Çok gevşek konuşma. – jhegedus

+2

IIRC, "üst işleviyle karşılaştırıldığında, ek argümanlara sahip olan yeni bir üst düzey tanıma" desugars "ve temelde argüman kalıplarındaki tüm tip bağımlılıkları zorlayan/güncelleyen işlev tanımlarıdır. –

İlgili konular