2011-09-11 3 views
2

을 어떻게 쓸 수 있습니까? 기능을 포인트 프리 스타일로 사용할 수 있습니다. 단계별로상호 작용이없는 점은 어떻게 만듭니 까?

+0

이미 포인트가 없습니까? –

+2

서곡에서'상호 작용 '하지 않았습니까? – delnan

+0

shortLinesOnly 함수 interact에서 @Tinctorius는 포인트가 없습니다. 포인트없는 함수는 실제 인수를 언급하지 않습니다. interact 함수는 결과를 언급합니다. –

답변

11

단계 :

interact r = getContents >>= putStr . r 
interact r = (getContents >>=) (putStr . r) 
interact r = (getContents >>=) $ (putStr .) $ r 
interact = (getContents >>=) . (putStr .) 
+0

JB 이것이 바로 내가 찾고있는 것입니다! 감사! –

+0

단계별로 도움이됩니다. –

6

가장 좋은 대답은 :하지 마십시오. 이 특정 예제의 경우 변경 사항은 코드가 읽기 쉽지 않다는 것입니다. 원래의 뾰족한 변형은 완벽합니다.

어떤 경우에는 pointfree 스타일을 피하는 것이 좋습니다. 인수가 선형 데이터 흐름을 겪지 않기 때문에이 중 하나입니다. 오히려 다른 것에 대한 데이터 흐름을 만드는 데 사용됩니다. 예 :

-- Bad: Pointy linear data flow description. 
chunksOf :: Int -> [a] -> [[a]] 
chunksOf n xs = 
    takeWhile (not . null) (map (take n) (iterate (drop n) xs)) 

-- Good: Pointfree linear data flow description. 
chunksOf :: Int -> [a] -> [[a]] 
chunksOf n = 
    takeWhile (not . null) . map (take n) . iterate (drop n) 

-- Bad: Now exaggerating with pointfree style. 
chunksOf :: Int -> [a] -> [[a]] 
chunksOf = 
    liftA2 ((.) (.) . (.) $ takeWhile (not . null)) 
      (map . take) 
      (iterate . drop) 
+1

이 경우 올바른 스타일 프리 스타일을 읽기가 어렵습니다. 나는 그걸하는 법을 알고 싶었습니다. –

관련 문제