| data Coin = Fair | Unfair deriving Show
|
| data Face = Head | Tail deriving Eq
|
|
|
| toss :: Coin -> [Face]
|
| toss Fair = [Head, Tail]
|
| toss Unfair = [Head, Head]
|
|
|
| coins :: [Coin]
|
| coins = [Fair, Unfair]
|
|
|
| foo :: [(Coin, Face)]
|
| foo = do
|
| coin <- coins -- select a coin
|
| face <- toss coin -- toss it
|
| cf <- (coin, face) -- Error: * Couldn't match type `(,) Coin' with `[]'
|
| return cf
|
|
|
| {-
|
| MonadNonDeterminism.hs:44:9: error: [GHC-83865]
|
| * Couldn't match type `(,) Coin' with `[]'
|
| Expected: [Face]
|
| Actual: (Coin, Face)
|
| * In a stmt of a 'do' block: cf <- (coin, face)
|
| In the expression:
|
| do coin <- coins
|
| face <- toss coin
|
| cf <- (coin, face)
|
| return cf
|
| In an equation for `experiment2':
|
| experiment2
|
| = do coin <- coins
|
| face <- toss coin
|
| cf <- (coin, face)
|
| ....
|
| |
|
| 44 | cf <- (coin, face)
|
| | ^^^^^^^^^^^^
|
|
|
| MonadNonDeterminism.hs:46:10: error: [GHC-83865]
|
| * Couldn't match expected type `(Coin, Face)'
|
| with actual type `Face'
|
| * In the first argument of `return', namely `cf'
|
| In a stmt of a 'do' block: return cf
|
| In the expression:
|
| do coin <- coins
|
| face <- toss coin
|
| cf <- (coin, face)
|
| return cf
|
| |
|
| 46 | return cf
|
| | ^^
|
| -}
|