Я покрытие читателя монады на данный момент, и я пришел через runReader
:Реализация интерфейсов функций, определенных внутри синтаксиса записи?
newtype Reader e a = Reader {runReader :: (e -> a)}
Я понимаю, что здесь конструктор данных Reader
это позволяет два различных типа (e
и a
) должны быть переданы в конструктор типа Reader
, который использует синтаксис записи, чтобы содержать функцию runReader ::
, которая работает с e
и a
.
Я пытаюсь осуществить проверку этого:
newtype Test a b = Test {runTest :: (a -> b)}
Как я могу идти о создании реализации runTest
?
Как и для любого другого типа данных - передайте ему аргумент правильного типа! 'Test id :: Test aa',' Test (\ b -> if b then Nothing else Just()) :: Test Bool (Maybe()) 'и т. Д. – Alec
@Alec этот комментарий не является конструктивным - может объясните пожалуйста? –
Прошу прощения, если я сошел как неискренний, это было не намерение. Я хотел сказать, что даже если 'runTest' определенно назван, он по-прежнему является просто полем - для построения' Test', вы передаете ему функцию (чтобы заполнить поле 'runTest'). Эта функция является вашей «реализацией» 'runTest'. – Alec