2011-09-25 7 views
3

수행 방법을 고민하는 데 어려움이 있습니다. 나는 상대적으로 모나드/IO 작업에 익숙하다. 그래서 내가 명백한 것을 놓치고 있다면 실례한다. 나는 잠시 동안 Google을 검색했고 아무 것도 생각해 내지 못했고 내가 읽은 것은이 작업을 수행하는 방법을 알아내는 것입니다.디렉토리의 파일 크기 합계

import System.Path.Glob (glob) 
import System.Posix.Files (fileSize, getFileStatus) 

dir = "/usr/bin/" 
lof = do files <- (glob (dir++"*")) 
     (mapM_ fileS files) 

fileS file = do fs <- getFileStatus file 
       print (fileSize fs) 

당신이 볼 수 있듯이, 이것은 크기를 얻고,이를 출력한다, 그러나 나는 실제로 합계하는 방법에 붙어 : 여기

내가 지금 가지고있는 것입니다.

답변

10

거의 다 왔어. 대신 그것을 인쇄의 파일 크기를 반환 fileS 수 있습니다 :

sizes <- mapM fileS files 
: 수행

return (fileSize fs) 

을 그리고, 대신 (결과를 버린다) mapM_ ING의 (결과 목록을 반환)를 mapM

이제 sizes은 크기에 해당하는 숫자 목록입니다. sum 명심하십시오 :-)

이 예제에 대한 이해를 높이고 (좋은 습관을 연습하기 위해) 함수에 대한 유형 시그니처를 작성해보십시오. 도움이 필요하면 ghci에 :t으로 문의하십시오.

+0

고마워요, 지금 알아 냈습니다. 작품처럼 매력 :) – Wes

+1

+1뿐만 아니라 학습을 지원하는 답변. –

관련 문제