Szukałem definicji seq
i natrafiłem na tę dziwaczność. Dlaczego wszystkie te funkcje mają takie same/podobne definicje?Przechodzenie przez kod źródłowy preludium wywołuje dziwność
seq :: a -> b -> b
seq = let x = x in x
inline :: a -> a
inline = let x = x in x
lazy :: a -> a
lazy = let x = x in x
Z definicją tą jest znacznie więcej w kodzie źródłowym. Co się dzieje?
Czy istnieje przyczyna "błąd" * nie można * zdefiniować wcześniej niż 'seq' i przyjaciele? –
'błąd' jest zdefiniowany jako' throw (komunikat ErrorCall) ', dlatego potrzebny jest mechanizm' Exception' i 'Typeable'. Można go zdefiniować poza strukturą wyjątku '' '', bezpośrednio z wykorzystaniem prymitywu 'raise #', o ile wiem, ale ładniej jest dopasować go do innych 'wyjątków'. Tak więc, aby zachować małe 'ghc-prim', które zapewnia tylko' raise # ', bardziej skomplikowane rzeczy trafiają do 'base'. W skrócie, można go zdefiniować wcześniej, ale nie jest tak przyjemny i nie ma powodu, aby to robić, a źródłem 'GHC.Prim' byłoby i tak nieużywany manekin. –