For example, i’ve got following function:
foo :: t -> f
foo var = foo' b var
where
b = bar 0.5 vect
and I need to specify literals’ 0.5 type — ‘t’
If i write smth. like (0.5::t), GHC creates new type variable ‘t0’, which is not corresponding to original ‘t’.
I’ve wrote a small function
ct :: v -> v -> v
ct _ u = u
and use it like this:
b = bar (ct var 0.5) d
Is there any better solution?
You can use
ScopedTypeVariablesto bring the type variables from the top-level signature into scope,Your helper function
ctis – with flipped arguments – already in the Prelude,so
would work too.