Haskell에서 레코드 구문이있는 유형에 대해`bind`를 정의하는 방법은 무엇입니까?

플라잉 서커스

Haskell 과정에서 Monad 과제를 풀 때 완전히 멈춰 있습니다. 다음에 대해 Monad 관련 함수를 정의하려는 샘플 데이터 유형이 있습니다.

data MyMonad a = MyMonad { func :: String -> a }

instance Functor MyMonad where
    fmap f (MyMonad x) = MyMonad (\a -> f (x a))   

instance Applicative MyMonad where
    pure x = MyMonad (\a -> x)
    (MyMonad f) <*> (MyMonad g) = MyMonad (\a -> (f a)(g a))

instance Monad MyMonad where
    return x = MyMonad (\a -> x)
    MyMonad x >>= f = f (\a -> x a) --my wrong definition 

Functor 및 Applicative 인스턴스가 선언되면 Monad에 대해 동일한 작업을 수행하려고하지만 ... func해당 f함수에 레코드 구문을 맞추는 방법을 이해하기에는 조금 더 가까워지지 않습니다 . 지금까지 볼 bind수행하는 기능으로 x의를 MyMonad을 통해 매핑하기 전에 f. 그것은 모나드의 중요한 기능 일뿐입니다. 내가 아는 한 한 데이터 유형 컨텍스트의 일부 값을 다른 컨텍스트에 넣을 수 있습니다. 솔직히 말해서 저는 bindMonad 인스턴스 [a], Maybe와 다른 여러 유형에 대한 정의를 알고 있습니다. 예, Monad 클래스가 제공하는 공통 목적이 무엇인지 분명히 알 수 있습니다. 그러나 나는 기록과 같은 것을 다루는 방법에 대한 이해를 높이기 위해이 특정한 경우에 어떤 제안을 받아야합니다.

빌렘 반 온셈

x에서이 MyMonad x형식으로 보유하고 String -> a있는 반면, f타입으로 가지고 a -> MyMonad b, 우리는 따라서 리턴한다 MyMonad b(즉, 랩하는 기능 String -> b).

따라서 우리는 a s :: Stringb. 우리는 첫 번째 통과하여 해당 작업을 수행 할 수 있습니다 s받는 x기능, 유형의 값을 검색합니다 a. 우리가 호출 할 수 있습니다 옆 fa그 매개 변수로, ands의은을 검색 MyMonad g. 그런 다음이 sg.

따라서 Monad인스턴스를 다음과 같이 구현할 수 있습니다 .

instance Monad MyMonad where
    return x = MyMonad (\a -> x)
    MyMonad x >>= f = MyMonad (\s -> let MyMonad g = f (x s) in g s)

"getter"를 정의 func :: MyMonad a -> a -> String했으므로 데이터 생성자 let … in …에서 값을 "언 래핑" 하는 표현식을 사용하는 대신 해당 getter를 사용할 수 있습니다 MyMonad.

instance Monad MyMonad where
    return x = MyMonad (\a -> x)
    MyMonad x >>= f = MyMonad (\s -> func (f (x s)) s)

Эта статья взята из Интернета, укажите источник при перепечатке.

Если есть какие-либо нарушения, пожалуйста, свяжитесь с[email protected] Удалить.

Отредактировано в
0

я говорю два предложения

0обзор
Войти в системуУчаствуйте в комментариях

Статьи по теме

유니 코드 문자 범위에서 UTF-8 문자를 인쇄하는 방법은 무엇입니까?

루비에서 반환 된 불일치 유형의 객체를 수정하는 방법은 무엇입니까?

더 넓은 영역의 Android에서 Seekbar 드래그를 설정하는 방법은 무엇입니까?

Pytorch에서 사용자 정의 레이어에 대해 역방향 방법을 정의하는 이유는 무엇입니까?

Django에서 model.Manager.create () 메서드를 재정의하는 방법은 무엇입니까?

SQL에서 정렬 된 결과의 테일링 필드를 병합하는 방법은 무엇입니까?

Jenkins 자유형 항목에서 도커 컨테이너를 사용하는 방법은 무엇입니까?

(Py) Spark Structured Streaming에서 잘못된 (손상된) JSON 레코드를 캡처하는 방법은 무엇입니까?

xquery에서 빈 노드를 처리하는 방법은 무엇입니까?

OpenShift에서 포드를 다시 시작하는 방법은 무엇입니까?

Pandas 데이터 프레임의 다른 열에서 특정 값에 대한 행의 열 값을 업데이트하는 방법은 무엇입니까?

Python에서 현재 스크립트의 코드를 얻는 방법은 무엇입니까?

stl 유형에 대한 공제 가이드를 추가하는 옵션은 무엇입니까?

IE에서 Flexbox 문제를 해결하는 방법은 무엇입니까?

상속 (추상 클래스 포함)을 사용하여 사용자 정의 프레임 워크 내에서 메서드의 하위 섹션이있는 하위 클래스를 제공하는 더 우아한 방법은 무엇입니까?

Kubernetes를 사용하여 포드 정의에서 / dev / console로 컨테이너를 매니페스트하는 방법은 무엇입니까?

HTML 태그 사이에 PHP 코드를 포함하는 방법은 무엇입니까?

cURL에서 업로드 속도를 얻는 방법은 무엇입니까?

파이썬에서 알파벳에 대한 순환 반복기를 만드는 방법은 무엇입니까?

각 모델 레이어 Pytorch에 대해 서로 다른 옵티 마이저를 사용하는 방법은 무엇입니까?

PhpStorm의 새 줄에서 코드 연관 배열을 다시 포맷하는 방법은 무엇입니까?

델파이에서 배열 인덱스로 사용되는 열거 유형의 첫 번째 요소를 제외하는 방법은 무엇입니까?

aws-cli에서`list-tasks`의 결과를 정렬하는 방법은 무엇입니까?

Delphi에서 바로 가기를 정의하는 "올바른"방법은 무엇입니까?

정신 패키지의 describeBy 출력에서 변수를 제외하는 방법은 무엇입니까?

Google GeoCharts : 사용자 정의 HTML 툴팁에서 헤더를 제거하는 방법은 무엇입니까?

Create-React-App에서 MobX를 구현하는 방법은 무엇입니까?

Android JAVA 코드에서 Camellia 128bit를 사용하여 암호화 및 해독하는 방법은 무엇입니까?

ggplot2에서 범주 형 변수의 x 축 크기를 변경하는 방법은 무엇입니까?

TOP список

  1. 1

    Распределение Рэлея Curve_fit на Python

  2. 2

    Редактировать существующий файл Excel C # npoi

  3. 3

    Резервное копирование / восстановление kafka и zookeeper

  4. 4

    Flutter: Unhandled Exception: FileSystemException: Creation failed, path = 'Directory: '' (OS Error: Read-only file system, errno = 30)

  5. 5

    Ipython использует% store magic для получения динамического имени

  6. 6

    Как получить список индексов всех значений NaN в массиве numpy?

  7. 7

    Bogue étrange datetime.utcnow()

  8. 8

    Как добавить Swagger в веб-API с поддержкой OData, работающий на ASP.NET Core 3.1

  9. 9

    В типе Observable <unknown> отсутствуют следующие свойства из типа Promise <any>.

  10. 10

    Дженерики и потоки Java

  11. 11

    Как изменить значок приложения для проекта libgdx android

  12. 12

    Почему бы не выдать ошибку ERROR в тесте Jasmine?

  13. 13

    Выполнение команд PowerShell в программе Java

  14. 14

    How to convert C++/CLI string to const char*

  15. 15

    Почему actionPerformed выполняется двумя потоками?

  16. 16

    Как отфильтровать несколько столбцов в Qtableview?

  17. 17

    Passing Core Data objects from UITableViewCell to another View Controller

  18. 18

    discord.py: on_message (message) не работает несколько дней

  19. 19

    Как прикрепить файл как вложение к письму с помощью SendGrid?

  20. 20

    Динамическое создание точек / квадратов внутри Picturebox

  21. 21

    Строка не читается после новой строки из .env в nodeJs

популярныйтег

файл