> But if one did start considering bottom to be a value, one would have to > distinguish different ones. For instance, (error "ABC") vs. (error > "PQR"). Obviously this is not finite.
Nor is it computable, since it must distinguish terminating programs from nonterminating ones (i.e. the halting problem). On a side note, since "instance (Finite a, Finite b) => Finite (a -> b)" should be possible, one can even compare some higher order functions with this approach ;). On 14 April 2010 09:29, Ashley Yakeley <ash...@semantic.org> wrote: > On Wed, 2010-04-14 at 08:13 +0100, Thomas Davie wrote: >> Your instances of Finite are not quite right: >> >> bottom :: a >> bottom = doSomethingToLoopInfinitely. >> >> instance Finite () where >> allValues = [(), bottom] > > Bottom is not a value, it's failure to evaluate to a value. > > But if one did start considering bottom to be a value, one would have to > distinguish different ones. For instance, (error "ABC") vs. (error > "PQR"). Obviously this is not finite. > > -- > Ashley Yakeley > > _______________________________________________ > Haskell-Cafe mailing list > Haskell-Cafe@haskell.org > http://www.haskell.org/mailman/listinfo/haskell-cafe > _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe