Nhìn vào IO
mã này:Luật Monoid thứ ba và IO?
Prelude> let e = return() :: IO()
Prelude> e `mappend` e
Prelude> let y = e `mappend` e
Prelude> :t y
y :: IO()
EDIT Rõ ràng, như tôi hiểu, IO
có một trường hợp Monoid
.
Tuy nhiên, không nên đánh giá sau đây để true
, để tuân thủ luật thứ ba Monoid?
Prelude> e `mappend` (e `mappend` e) == (e `mappend` e) `mappend` e
<interactive>:14:1: error:
* No instance for (Eq (IO())) arising from a use of `=='
* In the expression:
e `mappend` (e `mappend` e) == (e `mappend` e) `mappend` e
In an equation for `it':
it = e `mappend` (e `mappend` e) == (e `mappend` e) `mappend` e
Ví dụ 'Eq (IO a)' hợp lệ, trực quan hợp lệ sẽ rất hữu ích nếu bạn có thể viết một. Nhưng Alan Turing sẽ ngồi trong ngôi mộ của mình và cho bạn một lưỡi lashing nếu bạn cố gắng. – dfeuer
@dfeuer Tôi không thấy sự cố. Xét cho cùng, chúng ta có một cá thể 'Eq [a]'. –
@ReinHenrichs, bạn có một điểm! – dfeuer