let x = x +1 is perfectly cromulent when x is sufficiently lazy, e.g. in the one point compactification of the naturals:
data Conat = S Conat | Z There it represents infinity with proper sharing. -Edward On Jul 22, 2013, at 10:24 AM, Andreas Abel <andreas.a...@ifi.lmu.de> wrote: > On 22.07.2013 10:50, MigMit wrote: >> >> On Jul 22, 2013, at 12:27 PM, Andreas Abel <andreas.a...@ifi.lmu.de> >> wrote: >> >>> On 20.07.13 9:36 PM, Evan Laforge wrote: >>>> However, I'm also not agitating for a non-recursive let, I think >>>> that ship has sailed. Besides, if it were added people would >>>> start wondering about non-recursive where, and it would introduce >>>> an exception to haskell's pretty consistently order-independent >>>> declaration style. >>> >>> For functions, recursive-by-default let makes sense. But for >>> *values*, intended recursion is rather the exception. It is useful >>> for infinite lists and the like. For values of atomic type like >>> Int or Bool, recursive let is a bug. >> >> It seems hard to distinguish between them. What about values that >> contain functions, like data T = T Int (Int -> Int)? What about >> polymorphic values, that could be functions and could be not? > > I agree. It cannot be implemented like that. A thing that could be > implemented is that > > let x = e > > is an error if x appears strictly in e. In practice, this could catch some > unintended cases of recursion like > > let x = x +1 > > , but not all of them. > > Cheers, > Andreas > > -- > Andreas Abel <>< Du bist der geliebte Mensch. > > Theoretical Computer Science, University of Munich > Oettingenstr. 67, D-80538 Munich, GERMANY > > andreas.a...@ifi.lmu.de > http://www2.tcs.ifi.lmu.de/~abel/ > > _______________________________________________ > 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