A könyv (4. javított kiadás) 53. oldalán fun id x = x-re val id = 'a -> 'a van írva válasznak, ellenben ha beírom mosml-be, akkor ott is megjelenik az 'a (ugyanígy a megfelelő fólián is ki van írva az ''a).
Az 'a-t szerintem azért írja ki, hogy mutassa, hogy b egy polimorf (típus-paraméteres) dolog. Mivel ez a típusából amúgy is látszik, én ezt nem tekintem lényegi különbségnek (a val b = fn : 'a -> 'a felíráshoz képest természetesen).
A könyvben valószínűleg azért van másképp, mert az írásakor használt mosml verzió még nem akarta külön is hangsúlyozni, hogy egy függvény polimorf.
Oktató: A függvény definiálásakor - a paraméteres datatype-deklarációhoz hasonlóan - megadhatunk típusparamétereket is, pl.
Ha az a változó típusát leszűkítem, vagy fun alakban írom (fun len xs = foldl (fn (a,b) => b+1) 0), akkor minden OK.
A kérdéseim:
Ha többet szeretnél megtudni az okáról, a neten számos ezzel foglalkozó cikk, leirás található.
Oktató: A jelenség megértéséhez meg kell ismerni az expanzív és a nemexpanzív kifejezés fogalmát, és azt, hogy hogyan értelmezi ezeket az SML nyelv, és hogyan kezelik az egyes SML-értelmezők.
A polimorfizmusról és a kifejezések expanziójáról egy 8+1 oldalas magyar nyelvű összefoglalót felraktam a tárgy honlapjára:
A Moscow ML Owner's Manual ,,Value polymorphism'' c. 12. fejezete ugyanerről angolul ad rövid áttekintést (lásd pl. <http://dp.iit.bme.hu/download.html>, Moscow ML Owner's Manual).
Akit még bővebben érdekel, keressen ,,value polymorphism'' témájú cikkeket a weben.