Opened 7 years ago

Last modified 15 months ago

#1404 new feature request

allow more type signatures

Reported by: Isaac Dupree Owned by:
Priority: normal Milestone:
Component: Compiler (Type checker) Version: 6.6.1
Keywords: Cc:
Operating System: Unknown/Multiple Architecture: Unknown/Multiple
Type of failure: None/Unknown Difficulty: Unknown
Test Case: Blocked By:
Blocking: Related Tickets:

Description

(idea triggered by #393)

Allow multiple copies of a type-signature in a module, such that it is an error if they're not equivalent, but they don't have to be syntactically equal (
f :: ShowS
f :: String -> String
is okay).

It would also be nice to allow any name in scope at top-level (even if imported) to be given a type signature. But that raises a question: can these type signatures give a more specific type than that of the raw imported function, the way normal function type signatures can with regards to their implementation?

Use cases: (1. making sure multiple implementations give the same interface, generally varying by #ifdef) (2. asserting that something's type can be specified in two different weird ways). I don't really want to abandon having a type-signature right above every function definition even if it is a duplicate.

(1.) would be fixed by allowing type signatures in export lists instead. I suppose these could be more restrictive than in the module and not affect the module, e.g.

module X (idN :: Int -> Int, true) where
idN n = n
true :: Bool
true = idN True

Change History (4)

comment:1 Changed 7 years ago by igloo

  • Component changed from Compiler to Compiler (Type checker)
  • Milestone set to _|_

You can do (1) with

foo :: type
#if ...
foo = ...
#else
foo = ...
#endif

(2) doesn't seem that useful to me personally.

Type sigs in export lists might be nice, as some people seem to like giving them
as comments which then get out of sync with the actual types.

It might be worth starting a discussion on the Haskell' list about all this.

comment:2 Changed 6 years ago by simonmar

  • Architecture changed from Unknown to Unknown/Multiple

comment:3 Changed 6 years ago by simonmar

  • Operating System changed from Unknown to Unknown/Multiple

comment:4 Changed 15 months ago by morabbin

  • Type of failure set to None/Unknown

Did said discussion ever happen?

Note: See TracTickets for help on using tickets.