Great. Thanks to everyone!
Michael
Luke Palmer wrote:
Quite frequently.
Here are a few examples from my own code:
For "functional references" (representing a bidirectional function
from a data type to a part of itself (for example the first element of
a pair)).
data Accessor s a
= Accessor { get :: s -> a
, set :: a -> s -> s
}
My quantum computation arrow (really in the realm of "concrete, useful
things", huh? :-)
data Operator b c
= Op (forall d. QStateVec (b,d) -> IO (QStateVec (c,d)))
| ...
The ubiquitous FRP Behavior, comprising a current value and a function
which takes a timestep and returns the next value.
data Behavior a
= Behavior a (Double -> Behavior a)
The "suspend" monad, representing a computation which can either
finish now with a value of type a, or suspends to request a value of
type v before continuing.
data Suspend v a
= Return a
| Suspend (v -> Suspend v a)
It seems that most frequently, functions in ADTs are used when
implementing monads or arrows, but that doens't need to be the case.
A lot of times a function is the best way to represent a particular
part of a data structure :-)
Luke
On Feb 10, 2008 1:34 PM, Michael Feathers <[EMAIL PROTECTED]> wrote:
On a lark, I loaded this into Hugs this morning, and it didn't complain:
data Thing = Thing (Integer -> Integer)
But, I've never seen that sort of construct in an example. Do people
ever embed functions in ADTs?
Michael
_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe
_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe