Как я могу сделать это случитьсяПростейшие VARIADIC Функция
assert toList 1 2 3 == [1, 2, 3]
Я смотрел на
https://www.haskell.org/haskellwiki/Varargs
http://chris-taylor.github.io/blog/2013/03/01/how-haskell-printf-works/
http://paczesiowa.blogspot.de/2010/03/polyvariadic-primefib-problem.html
Но я не ухватить его еще (еще много младший с Haskell)
Моя попытка до сих пор
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE UndecidableInstances #-}
{-# LANGUAGE OverlappingInstances #-}
class ToVector r where
process :: Int -> r
instance ToVector Int where
process = id
instance ToVector r => ToVector (Int -> r) where
process s = \v -> process v
был встречен с этим
*Main> process 1 2 3
<interactive>:158:1:
Could not deduce (ToVector (a0 -> a1 -> t))
arising from the ambiguity check for ‘it’
from the context (ToVector (a -> a2 -> t), Num a2, Num a)
bound by the inferred type for ‘it’:
(ToVector (a -> a2 -> t), Num a2, Num a) => t
at <interactive>:158:1-13
The type variables ‘a0’, ‘a1’ are ambiguous
When checking that ‘it’
has the inferred type ‘forall a a1 t.
(ToVector (a -> a1 -> t), Num a1, Num a) =>
t’
Probable cause: the inferred type is ambiguous
*Main>
Любая помощь и нагрузок объяснение очень приветствуется
Ошибка относится к коду вне вашего фрагмента. Вам нужно будет добавить больше для нас, чтобы помочь вам. – crockeea
Действительно нет. У меня просто есть несколько Pragmas в начале кода, но это действительно так. Очевидно, я загружаю модуль через: l mymod.hs в ghci – robkuz
Эта конкретная ошибка, похоже, является ошибкой полиморфизма; Просто попробуйте процесс (1 :: Int) (2 :: Int) (3 :: Int) и посмотрите, как это происходит (средство проверки типов не может само доказать, что 1,2 или 3 должны быть 'Int'), также , если вы новичок в haskell, держите свои руки в таком состоянии. Я использую haskell в течение нескольких лет и никогда не нуждался в чем-то подобном. – Cubic