[Haskell-cafe] What is a rigid type variable?
ryani.spam at gmail.com
Mon Jun 23 02:37:25 EDT 2008
To answer the question in the subject:
>From "Simple unification-based type inference for GADTs",
Peyton-Jones, et al. ICFP 2006.
"Instead of "user-specified type", we use the briefer term rigid
type to describe a type that is completely specified, in some
direct fashion, by a programmer-supplied type annotation."
So a rigid type is any type specified by a programmer type signature.
All other types are "wobbly".
Does anyone know what is going to change about the terminology with
the new "boxy types" paper?
On Sun, Jun 22, 2008 at 8:26 PM, Xiao-Yong Jin <xj2106 at columbia.edu> wrote:
> Hi all,
> I'm writing a short function as follows, but I'm not able to
> find a suitable type signature for `go'. It uses
> Numeric.LinearAlgebra from hmatrix.
> -- | Map each element in a vector to vectors and thus form a matrix
> -- | row by row
> mapVecToMat :: (Element a, Element b) =>
> (a -> Vector b) -> Vector a -> Matrix b
> mapVecToMat f v = fromRows $ go (d - 1) 
> d = dim v
> go :: Element b => Int -> [Vector b] -> [Vector b]
> go 0 vs = f (v @> 0) : vs
> go !j !vs = go (j - 1) (f (v @> j) : vs)
> If I give the type signature to go as this, I got the
> following error
> Couldn't match expected type `b1' against inferred type `b'
> `b1' is a rigid type variable bound by
> the type signature for `go' at test.hs:36:20
> `b' is a rigid type variable bound by
> the type signature for `mapVecToMat' at test.hs:31:35
> Expected type: Vector b1
> Inferred type: Vector b
> In the first argument of `(:)', namely `f (v @> 0)'
> In the expression: f (v @> 0) : vs
> So what is this rigid type variable all about and what is
> correct type of the function `go'?
> Thanks in advance,
> c/* __o/*
> <\ * (__
> */\ <
> Haskell-Cafe mailing list
> Haskell-Cafe at haskell.org
More information about the Haskell-Cafe