Is it possible to create a type with a numeric argument?
i.e. if I want to create a type of integers with a fixed bit-width:
newtype FixedWidth w = FixedWidth Integer
addFixedWidth :: FixedWidth w -> FixedWidth w -> FixedWidth (w+1)
mulFixedWidth :: FixedWidth w -> FixedWidth w -> FixedWidth (2*w)
So that the type-checker only allows FixedWidth
s of the same type to be added or multiplied, but also determines the correct precision of the result.
I know you can do something like this:
data Nil = Nil
data Succ x = Succ
addFixedWidth :: FixedWidth w -> FixedWidth w -> FixedWidth (Succ w)
and represent the number 4 as Succ (Succ (Succ (Succ Nil))))
, but that's incredibly ugly. I also need to figure out how to append two Succ
s for the multiply result type.
There are three basic types of time signatures: simple, compound, and complex.
A function signature (or type signature, or method signature) defines input and output of functions or methods. A signature can include: parameters and their types. a return value and type. exceptions that might be thrown or passed back.
Java. In Java, a method signature is composed of a name and the number, type and order of its parameters. Return types and thrown exceptions are not considered to be a part of the method signature, nor are the names of parameters; they are ignored by the compiler for checking method uniqueness.
Method Signature According to Oracle, the method signature is comprised of the name and parameter types. Therefore, all the other elements of the method's declaration, such as modifiers, return type, parameter names, exception list, and body are not part of the signature.
The feature you are looking for is type-level naturals, know as the -XTypeNats
extension to Haskell.
At the moment this is possibly only in an experimental branch of GHC. It is likely to merge into GHC by 7.4 I think.
Some further reading:
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With