[Haskell-cafe] Proposal: Non-recursive let
Andreas Abel
andreas.abel at ifi.lmu.de
Fri Jul 26 18:31:07 CEST 2013
Mmh, true, for polymorphic definitions there is not a lot to see. This
probably diminishes the applicability of a strictness analysis quite a
bit. Maybe it is entirely useless at this point.
It would make more sense after whole-program optimization. Ghc does not
have this, I heard the Intel Research Compiler does such things.
This is becoming a very high-hanging fruit...
--Andreas
On 24.07.2013 20:22, Edward Kmett wrote:
> You only have a Num constraint when type checking that code:
>
> (+) :: Num a => a -> a -> a
>
> For better or worse, you don't get strictness in the type signatures in
> Haskell.
>
> We do not separate codata from data here.
>
> Without knowing about the particular instance of Num and even the
> direction of recursion on (+) there is no information for such a
> strictness analyzer to work with.
>
> many :: Alternative m => m a -> m [a]
> many p = ps where
> ps = (:) <$> p <*> ps
> <|> pure []
>
> is another perfectly cromulent example of "value" recursion, and one
> that is far nearer and dearer to my heart and is similarly opaque to any
> such analysis.
>
> -Edward
>
>
>
> On Wed, Jul 24, 2013 at 4:14 AM, Andreas Abel <andreas.abel at ifi.lmu.de
> <mailto:andreas.abel at ifi.lmu.de>> wrote:
>
> Sure. I have not looked a concrete strictness analyses, but I
> expect they would treat Conat differently than Integer. In particular,
>
> x does *not* appear strictly in S x
>
> if S is a lazy constructor.
>
>
> On 22.07.13 4:54 PM, Edward Kmett wrote:
>
> 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.abel at ifi.lmu.de <mailto:andreas.abel at ifi.lmu.de>> wrote:
>
> On 22.07.2013 10:50, MigMit wrote:
>
>
> On Jul 22, 2013, at 12:27 PM, Andreas Abel
> <andreas.abel at ifi.lmu.de <mailto:andreas.abel at 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.abel at ifi.lmu.de <mailto:andreas.abel at ifi.lmu.de>
> http://www2.tcs.ifi.lmu.de/~__abel/
> <http://www2.tcs.ifi.lmu.de/~abel/>
>
> _________________________________________________
> Haskell-Cafe mailing list
> Haskell-Cafe at haskell.org <mailto:Haskell-Cafe at haskell.org>
> http://www.haskell.org/__mailman/listinfo/haskell-cafe
> <http://www.haskell.org/mailman/listinfo/haskell-cafe>
>
>
>
> --
> Andreas Abel <>< Du bist der geliebte Mensch.
>
> Theoretical Computer Science, University of Munich
> Oettingenstr. 67, D-80538 Munich, GERMANY
>
> andreas.abel at ifi.lmu.de <mailto:andreas.abel at ifi.lmu.de>
> http://www2.tcs.ifi.lmu.de/~__abel/ <http://www2.tcs.ifi.lmu.de/~abel/>
>
>
--
Andreas Abel <>< Du bist der geliebte Mensch.
Theoretical Computer Science, University of Munich
Oettingenstr. 67, D-80538 Munich, GERMANY
andreas.abel at ifi.lmu.de
http://www2.tcs.ifi.lmu.de/~abel/
More information about the Haskell-Cafe
mailing list