Re: In a Pascal-like language, would being able to declare a subroutine as "purely functional" be of any value?
Robbert Haarman <comp.lang.misc@inglorion.net>
Sat, 12 Mar 2011 10:39:41 +0100
From comp.compilers
Related articles |
In a Pascal-like language, would being able to declare a subroutine as noitalmost@cox.net (noitalmost) (2011-03-11) |
Re: In a Pascal-like language, would being able to declare a subroutin gah@ugcs.caltech.edu (glen herrmannsfeldt) (2011-03-11) |
Re: In a Pascal-like language, would being able to declare a subroutin bobduff@shell01.TheWorld.com (Robert A Duff) (2011-03-11) |
Re: In a Pascal-like language, would being able to declare a subroutin pdjpurchase@googlemail.com (1Z) (2011-03-11) |
Re: In a Pascal-like language, would being able to declare a subroutin gah@ugcs.caltech.edu (glen herrmannsfeldt) (2011-03-12) |
Re: In a Pascal-like language, would being able to declare a subroutin comp.lang.misc@inglorion.net (Robbert Haarman) (2011-03-12) |
Re: In a Pascal-like language, would being able to declare a subroutin mcr@wildcard.demon.co.uk (Martin Rodgers) (2011-03-12) |
Re: In a Pascal-like language, would being able to declare a subroutin noitalmost@cox.net (noitalmost) (2011-03-15) |
Re: In a Pascal-like language, would being able to declare a subroutin wclodius@los-alamos.net (2011-03-15) |
Re: In a Pascal-like language, would being able to declare a subroutin mcr@wildcard.demon.co.uk (Martin Rodgers) (2011-03-16) |
Re: In a Pascal-like language, would being able to declare a subroutin sinu.nayak2001@gmail.com (Srinivas Nayak) (2011-03-16) |
Re: In a Pascal-like language, would being able to declare a subroutin massimo_dentico@hotmail.com (Massimo A. Dentico) (2011-03-18) |
[2 later articles] |
| List of all articles for this month |
From: | Robbert Haarman <comp.lang.misc@inglorion.net> |
Newsgroups: | comp.compilers |
Date: | Sat, 12 Mar 2011 10:39:41 +0100 |
Organization: | Wanadoo |
References: | 11-03-032 11-03-033 |
Keywords: | design, optimize |
Posted-Date: | 12 Mar 2011 23:21:05 EST |
On Fri, Mar 11, 2011 at 07:55:22PM +0000, glen herrmannsfeldt wrote:
> noitalmost <noitalmost@cox.net> wrote:
>
> > I was thinking of something like:
> > pure function foo(x,y : int) int
> > begin
> > ...
> > end;
>
> Fortran has PURE. You might look at how it was done.
>
> In addition, variables aren't allowed to have the SAVE attribute
> (static in some other languages). ...
In Haskell, where functions are pure by default, there is an escape
hatch called unsafePerformIO so that impure code can be smuggled into
otherwise pure functions without upsetting the type checker.
Using unsafePerformIO, you can perform logging, e.g. like this:
import System.IO
import System.IO.Unsafe
add a b = unsafePerformIO $ do
putStrLn $ "add " ++ (show a) ++ " + " ++ (show b)
return $ a + b
The type of add here is (Num a) => a -> a -> a (i.e. it takes two instances
of Num and returns an instance of Num). This type is the same as if we had
written:
add a b = a + b
which is a pure function.
Regards,
Bob
Post a followup to this message
Return to the
comp.compilers page.
Search the
comp.compilers archives again.