2 ms·
Note that this feature is far from being useful only for class Read. The Monad class actually depends on it too: class Monad m where (>>=) :: m a -> (a
by Peaker 14y ago
Note that this feature is far from being useful only for class Read.
The Monad class actually depends on it too:
class Monad m where
(>>=) :: m a -> (a -> m b) -> m b
return :: a -> m a
The type of "return" can only be expressed with return-type polymorphism.
This means you cannot really implement Haskell-like monads with dynamic typing. You have to implement them in a less general way.
As for dispatching on runtime values, that is ordinary pattern matching:
f (RuntimeValue1 x y) = ... case 1 ...
f (RuntimeValue2 x y) = ... case 2 ...
- chongli 14y ago>This means you cannot really implement Haskell-like monads with dynamic typing. Ahh, yeah I've heard this before. It totally slipped my mind. >As for dispatching on runtime values, that is ordinary pattern matching Can you extend the patterns of a function at runtime (or even across modules)?
- Peaker 14y agoNo, you can't write a function spread across modules depending on the value of its input, short of implementing a dispatch system.