Я пытаюсь получить экземпляр категории для трансформаторов автомата Мура, где:
data Moore a b = Moore b (a -> Moore a b)
type MooreT a b c = (Moore a b -> Moore a c)
Проблема в том, что MooreT
имеет 3 параметра, а Category
всего 2. Пробовал писать: instance Category (MooreT a)
, но не получилось.
Дело в том, что параметр a
на самом деле не имеет значения для определения id
и (.)
. Например:
id :: MooreT a b b
id x = x
Есть ли способ определить такой экземпляр? Или мне нужно определить MooreT
для определенного типа a
, например type IntMooreT a b = MooreT Int a b
?
Я все еще новичок в Haskell, поэтому извините, если это глупый вопрос.
instance Category (MooreT a)
, но у меня не получилось. Это правильный способ сделать это. Укажите фактический код, который вы пробовали, и сообщение об ошибке, с которым вы столкнулись, и мы можем помочь вам исправить это. - person Benjamin Hodgson♦   schedule 22.09.2016MooreT' should have 3 arguments, but has been given 1 * In the instance declaration for
Category (MooreT a)' - person Reddog   schedule 22.09.2016MooreT
- это синоним типа, что означает, что он должен полностью применяться при использовании (т. Е. Он должен применяться к 3 аргументам) и вinstance Category (MooreT a)
явно применяется только к одному. - person user2407038   schedule 22.09.2016Category
. Я ответил Бенджамину Ходжсону, поскольку он заявил: «Это правильный способ сделать это». Я действительно читаю ошибки GHCI. - person Reddog   schedule 22.09.2016newtype
илиdata
. - person user2407038   schedule 22.09.2016