2016-07-04 2 views
2

하스켈 docsevaluate 기능을 설명`이해 :evaluate` Functiion

결과 IO 작업이 실행될 때

강제 인수가 약한 머리 정상적인 형태로 평가합니다.

Prelude Control.Exception> let xs = [1..100] :: [Int]                 Prelude Control.Exception> :sprint xs 
xs = _ 
Prelude Control.Exception> let ys = evaluate xs 
Prelude Control.Exception> :t ys 
ys :: IO [Int] 
Prelude Control.Exception> ys 
[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,6Prelu2,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100] 
Prelude Control.Exception> :sprint xs 
xs = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23, 
     24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45, 
     46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67, 
     68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89, 
     90,91,92,93,94,95,96,97,98,99,100] 
Prelude Control.Exception> :sprint ys 
ys = _ 

이유는 즉 :sprint ys_ : _ 동일하지 않습니다, 약한 헤드 정규 양식에 ys하지?

답변

10

ys 값의 유형은 IO [Int]입니다. 이제 입출력은 추상적 인 유형이므로 귀하의 경우에는 RealWorld -> ([Int], RealWorld)으로 생각할 수 있습니다. 이제이 IO 값은 이미 약한 머리 정상 형태입니다. 그것이 sprint 일 때 _으로 보는 이유입니다.

이유는 즉 :sprint ys_ : _ 동일하지 않습니다, 약한 헤드 정규 양식에 ys하지? 이 목록은 아니지만 유형 IO [Int]의 값이기 때문에

ys 외부 용어는 _ : _을 할 수 없습니다.

SIBI 말했다 된 내용 외에도
9

, 여기 evaluate 실제로 문서가 무슨 말을한다는 것을 볼 수있는 방법입니다

GHCi> let xs = [1..100] :: [Int] 
GHCi> :sprint xs 
xs = _ 
GHCi> let a = evaluate xs >> return() 
GHCi> a 
GHCi> :sprint xs 
xs = 1 : _ 
관련 문제