Я ожидаю, что функция noToState
ниже работает, которая перемещается между всеми состояниями, чтобы найти ту, которая соответствует указанному номеру состояния и возвращает состояние.Как определить функцию, возвращающую полиморфное значение
class State a where
allStates :: [a]
class (State a) => IntState a where
-- starting from zero, consecutive
stateNo :: a -> Integer
noToState :: (IntState a) => Integer -> a
noToState n = case lookup n $ zip (map stateNo allStates) allStates of
Just st -> st
Nothing -> undefined -- this should never happen
Однако он дает ошибку: Could not deduce (IntState a0) arising from a use of ‘stateNo’
.
Так в коде, где я совершил ошибки? Как мне их исправить? Благодарю.
Подобно тому, как замечание: то, что вы пытаетесь сделать? Может быть, вам действительно не нужны типы классов (или ваши собственные) вообще – Carsten
@ CarstenKönig Я определяю алгоритм k-path для преобразования DFA в регулярное выражение. Так что мне нужен способ получить доступ к состоянию с цифрами :) –
ok - но я предполагаю, что у вас есть конкретное представление вашего DFA/State, так почему бы просто не сделать эту функцию для этого представления? Ну, неважно, я надеюсь, что мой ответ поможет вам (и работе) – Carsten