[Haskell-cafe] Re: Refactoring status

Bob ac78f92aa421c5e2b9 at gazeta.pl
Sat Jan 5 19:45:42 EST 2008

On 2008-01-04 0:23, Bulat Ziganshin wrote:
> Hello C.M.Brown,
> Thursday, January 3, 2008, 10:46:54 PM, you wrote:
>>> i don't use
>>> type signatures at all - this creates some problems when i wrote large
>>> portion of code and try to make it compile, but nothing more
>> I believe type signatures are the very essence of Haskell documentation!
>> I'd much rather see a program with type signatures for functions and
>> little (or no) comments over programs with no type signatures and
>> ambigious comments (if any comments at all!).
>> Type signatures really does make dealing with someone elses code that
>> much easier.
> well, i don't worry about types of things with which i work. i know
> that it is a file, for example. its actual type depends on the
> information i need inside this function. it may start as FileInfo type,
> then after refactoring it will become CompressedFile or
> (fileInfo,FileSize) type. while it's great to know types of every
> variable to better understand how program works, adding type
> signatures means more work when writing program and when changing it.
> i want to express only data processing algorithm leaving all the
> details to compiler. for me, ghc just "reads thoughts"
> types and type signatures was required in classic languages to fight
> with errors. but in haskell omitting type signatures doesn't make
> program less reliable, so i don't need to write this extra code in
> addition to the essential - algorithm itself. for the same reason, i
> like pointless notation

You are wrong. Without type signatures some type errors will not be
caught by the compiler, resulting in erroneous program behaviour.
An example:

makeURI file index = "" ++
    urlEncode file ++ "&index=" ++ show index

the intended signature for the above function is:
String -> Int -> String, but suppose I've used it that way:
makeURI "somefile.txt" "1"
this is a type error, String was used where Int was expected,
but the program compiles just fine. So now the string:"1"
will be sent to the server which is of course wrong because
is expected.

Without type declarations You are not using the full power
of static type checking.

More information about the Haskell-Cafe mailing list