lomeo: (лямбда)
Dmitry Antonyuk ([personal profile] lomeo) wrote2007-04-10 02:31 pm

Вывод типов всегда завершается, говорите?

Вот здесь у меня висит на выводе типа myFix:

newtype Fun a = Fun (Fun a -> a)
 
fun x@(Fun f) = f x
 
myFix = fun (Fun fun)


Запускал в GHCi 6.6

[identity profile] lomeo.livejournal.com 2007-04-10 03:23 pm (UTC)(link)
Знаю что не так. Баловался с нерекурсивным определением. Ты же сказал, что рекурсия, тем более хвостовая сосёт ;-)

В частности вот:

fixedFac f 0 = 1
fixedFac f n = n * f (n - 1)

fac = myFix fixedFac


Это хотел.

[identity profile] palm-mute.livejournal.com 2007-04-10 03:29 pm (UTC)(link)
Да я понял.
newtype Fun a = Fun (Fun a -> a)

unwrap (Fun f) = f

selfApply f = unwrap f f

myfix f = selfApply $ Fun $ \g -> f (selfApply g)

> myfix (\f n -> if n==0 then 1 else n * f (n-1)) 5
120

[identity profile] deni-ok.livejournal.com 2007-04-11 07:17 am (UTC)(link)
Здорово!
Какие вы оба умные :-)

[identity profile] lomeo.livejournal.com 2007-04-11 08:25 am (UTC)(link)
:-)

[identity profile] palm-mute.livejournal.com 2007-04-11 08:53 am (UTC)(link)
[Смайлик, ковыряющий в носу, уставившись в пол]