내가 읽는 중 하스켈을 배우십시오 그리고 이미 적용 사례를 다루었으며 이제는 단서가 있습니다. 나는 둘 다 이해하는 데 아무런 문제가 없다. 비록 실제로 응용에서 유용한 것을 찾았지만 monoid는 그렇지 않다. 그래서 저는 하스켈에 대해 무언가를 이해하지 못한다고 생각합니다.모노로이드의 실제 사용은 무엇입니까?
먼저 Applicative
을 말하면 '컨테이너'에 대한 다양한 작업을 수행하기 위해 통일 구문과 같은 것을 만듭니다. 그래서 우리는 Maybe
, 목록에 대한 작업을 수행하기 위해 정상 기능을 사용할 수 있습니다, IO
, 기능 (? 내가 말한해야 모나드는 아직 모나드를 모르는) :
λ> :m + Control.Applicative
λ> (+) <$> (Just 10) <*> (Just 13)
Just 23
λ> (+) <$> [1..5] <*> [1..5]
[2,3,4,5,6,3,4,5,6,7,4,5,6,7,8,5,6,7,8,9,6,7,8,9,10]
λ> (++) <$> getLine <*> getLine
one line
and another one
"one line and another one"
λ> (+) <$> (* 7) <*> (+ 7) $ 10
87
그래서 실용적는 추상화입니다. 나는 우리가 그것 없이는 살 수 있다고 생각하지만 그것은 명확하게 아이디어를 표현하는 데 도움이된다.
이제는 Monoid
을 살펴 보겠습니다. 또한 추상화와 매우 단순한 것입니다. 그러나 그것은 우리에게 도움이됩니까? 더 명확 일을하는 방법이 있음을이 책에서 모든 예를 들어이 분명한 것 같다 :
λ> :m + Data.Monoid
λ> mempty :: [a]
[]
λ> [1..3] `mappend` [4..6]
[1,2,3,4,5,6]
λ> [1..3] ++ [4..6]
[1,2,3,4,5,6]
λ> mconcat [[1,2],[3,6],[9]]
[1,2,3,6,9]
λ> concat [[1,2],[3,6],[9]]
[1,2,3,6,9]
λ> getProduct $ Product 3 `mappend` Product 9
27
λ> 3 * 9
27
λ> getProduct $ Product 3 `mappend` Product 4 `mappend` Product 2
24
λ> product [3,4,2]
24
λ> getSum . mconcat . map Sum $ [1,2,3]
6
λ> sum [1..3]
6
λ> getAny . mconcat . map Any $ [False, False, False, True]
True
λ> or [False, False, False, True]
True
λ> getAll . mconcat . map All $ [True, True, True]
True
λ> and [True, True, True]
True
그래서 우리는 몇 가지 패턴을 발견하고 새로운 형태의 클래스를 만든이 ... 좋아, 나는 수학을 좋아한다. 그러나 실용적인 관점에서,
Monoid
의 요점은 무엇입니까? 그것은 아이디어를 더 잘 표현하는 데 어떻게 도움이됩니까?
당신이 실제로 monoids의 힘을 보여주는 몇 가지 고급 소재를 파고 싶다면 [finger trees] (http://www.cs.ox.ac.uk/ralf.hinze/publications/FingerTrees.pdf)를 확인하십시오.) ('Data.Sequence' 뒤의 엔진). 나는 지금 당장 생각할 수없는 간단한 예제가 있다고 확신한다. – luqui
나는이 우수한 [Dan piponi] (http://blog.sigfpe.com/2009/01/haskell- monoids-and-their-uses.html) 기사를 살펴 보도록 권합니다. – Sibi
관련이 있지만 중복 질문 : [Data.Monoid의 모든 newtype 래퍼의 실제 가치는 무엇입니까?] (http://stackoverflow.com/questions/22080564/whats-the-practical-value-of-all-those- newtype-wrappers-in-data-monoid) – AndrewC