나는 seq
의 정의를 찾고 있었고 이상하게 보였습니다. 왜이 모든 기능들은 동일하거나 유사한 정의를 가지고 있습니까?서곡의 소스 코드를 살펴보면 이상한 일이 생깁니다
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
소스 코드에는이 정의가 더 많이 있습니다. 무슨 일이야?
'error' * 이유는 'seq'와 친구들보다 먼저 정의 할 수 없습니까? –
'error'는'throw (ErrorCall message)'로 정의되어 있으므로'Exception' 메커니즘과'Typeable'이 필요합니다. 필자가 아는 한'raise # '프리미티브를 사용하여 'Exception' 프레임 워크 외부에서 정의 할 수 있지만, 다른'Exception'과 맞도록하는 것이 더 좋습니다. 그래서''ghc-prim''을 작게 유지하기 위해서''raise # ''만 제공하면 더 정교한 것들이''base''에 들어갑니다. 간단히 말해서, 더 일찍 정의 될 수 있지만, 그렇게 좋지는 않습니다. 좋은 이유가 없습니다.'GHC.Prim' 소스는 사용되지 않은 더미 일 것입니다. –