
Thanks.
I had put together something similar to your first suggestion but tried to use PutStrLn(Show...). I'd also thought of your second suggestion about a dummy show for functions.
A little further along in "The Little MLer" the ints function is replaced by other functions like primes and fibs, which also return Links:
fun primes(n)
= if is_prime(n+1)
then Link(n+1,primes)
else primes(n+1)
fun fibs(n)(m)
= Link(n+m,fibs(m))
which are passed to chain_item:
fun chain_item(n,Link(i,f))
= if eq_int(n,1)
then i
else chain_item(n-1,f(i))
which can be called to request the nth (12th) prime number beginning at 1.
- chain_item(12,primes(1));
GC #0.0.0.1.3.61: (1 ms)
val it = 37 : int
-
So I guess the answer to your question about whether the function is ever called with a different value may be, yes.
Michael
--- On Mon, 5/18/09, Ryan Ingram
data Chain = Link Int (Int -> Chain)
You can write this:
instance Show Chain where show (Link n _) = "Link " ++ show n ++ " <fn>"
Or you can make a dummy "Show" instance for functions:
instance Show (a -> b) where show _ = "<fn>" data Chain = Link Int (Int -> Chain) deriving Show
One question: Do you expect to ever call the function with a different
value? For example:
otherChain :: Chain
otherChain = case (ints 0) of Link _ f -> f 100
If not, you can replace Chain entirely by [Int], due to laziness,
something that's not possible in ML. (Although you can get the same
result in ML by using (int * (() -> chain)) instead.
-- ryan
On Mon, May 18, 2009 at 6:36 PM, Brandon S. Allbery KF8NH
On May 18, 2009, at 21:19 , michael rice wrote:
*Main> :t ints 0 ints 0 :: Chain *Main> ints 0
<interactive>:1:0: No instance for (Show Chain)
In general, you want to append deriving Show to your types. You may also want to be able to input them in ghci, so instead say deriving (Show, Read) -- brandon s. allbery [solaris,freebsd,perl,pugs,haskell] allbery@kf8nh.com system administrator [openafs,heimdal,too many hats] allbery@ece.cmu.edu electrical and computer engineering, carnegie mellon university KF8NH
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe