Блин.

Dec 04, 2007 17:05

Вечереет, а я туплю. Статическая типизация всё-таки сложная штука.
Есть отдельно взятая функция:
addStates :: (DynGraph gr, Eq s) =>
        [(s, (s, [x]), (x, y))] -> gr (s, [x]) (x, y) -> (gr (s, [x]) (x, y), [(s, Node)])
addStates ss g = (g', zip s nodes') where
        ss' = (`nubBy` ss) $ \(_, (s, _), _) (_, (s', _), _) -> s == s'
        g' = insNodes (zip nodes' s) g
        nodes' = newNodes (length ss') g
        s = map (\(_,(s, _), _) -> s) ss'
, где
nubBy :: (a -> a -> Bool) -> [a] -> [a]
insNodes :: DynGraph gr => [LNode a] -> gr a b -> gr a b
newNodes :: Graph gr => Int -> gr a b -> [Node]

Prelude> :r
[1 of 1] Compiling Automatons ( automatons.hs, interpreted )
automatons.hs:144:1:
Occurs check: cannot construct the infinite type: s = (s, [x])
When generalising the type(s) for `g''
In the definition of `addStates':
addStates ss g
= (g', zip s nodes')
where
ss' = (`nubBy` ss) $ \ (_, (s, _), _) (_, (s', _), _) -> s == s'
g' = insNodes (zip nodes' s) g
nodes' = newNodes (length ss') g
s = map (\ (_, (s, _), _) -> s) ss'
Failed, modules loaded: none.

В чем моя ошибка, в упор не вижу. Вроде правильно всё. Причем если сигнатуру типа addStates закомментить, то компилится (тип addStates при этом (DynGraph gr, Eq a) => [(t, (a, t1), t2)] -> gr a b -> (gr a b, [(a, Node)])).
Утро вечера мудренее, вобщем.

haskell

Previous post Next post
Up