Например, у меня есть следующие функции:"Где тип функции в Haskell
foo :: t -> f
foo var = foo' b var
where
b = bar 0.5 vect
и мне нужно указать литералов 0.5 типа -„т“
Если я пишу л. например, (0.5::t)
, GHC создает новую переменную типа 't0', которая не соответствует оригинальному 't'.
Я написал небольшую функцию
ct :: v -> v -> v
ct _ u = u
и использовать его как это:
b = bar (ct var 0.5) d
Есть ли лучшее решение?
Там есть опция компилятора, что позволит вам сказать '(0,5 :: гр)' и он будет соответствовать 't' окружающему пространству' t', но я забываю, что это такое. –
вы написали очень мало информации - например, что такое бар, соответственно, подпись типа бара и foo '. поскольку я понимаю, что строчные буквы - это заполнители для ghc, которые должны быть выведены. известные типы начинаются с прописной буквы типа «Float» или «Int», поэтому вы не передаете почти никакой информации о типе компилятору, который запрашивает дополнительную информацию. – epsilonhalbe
, если вы попытаетесь загрузить файл с помощью 'ghci', интерпретатор все еще терпит неудачу, поскольку я помню, что это менее строго. Кроме того, вы можете узнать о типе функции ': t foo' – epsilonhalbe