>

하스켈을 배우려고 노력하고 있지만 무언가에 걸려 있습니다. 지금까지 함수 서명이이 규칙을 준수한다는 것을 이해했습니다.

<name> :: <type constraint A> => <input type A> -> <input type B> -> .. <input type X> -> <return type>

현재 이해하는 몇 가지 예는 다음과 같습니다.

-- Returns input + 2
add2 :: Int -> Int
add2 x = x + 2
-- Returns the result of applying a function that takes an int and returns an int on an input int
adds2 :: (Int -> Int) -> Int -> Int
adds2 func x = func x
-- Returns a String with "Hello" prepended to the front
sayHello :: String -> String
sayHello name = "Hello " ++ name

그러면이 문제가 발생했습니다.

mate :: RandomGen g => Gene -> Gene -> Rand g Gene

함수 이름이 mate 라는 것을 알고 있습니다 그리고 g 에서 형식 제약 조건이 있습니다.   RandomGen 유형이어야합니다. 그런 다음 Gene 유형의 두 값을 입력으로 사용합니다. .

그러나 실제로 혼란스러워하는 것은 리턴 타입입니다. 이것을 어떻게 해석하면 누구나 초보자 Haskeller에게 설명 할 수 있습니까?

  • 답변 # 1

    자신을 정의한 경우

    data MyType = A Int String
    
    

    그런 다음 A , 데이터 생성자는 효과적으로 유형이 함수입니다

    A :: Int -> String -> MyType
    
    

    그리고 당신은 MyType 의 가치를 생산하기 위해 이것을 이렇게 부를 것입니다 .

    A 42 "hello"
    
    

    그래서 데이터 생성자입니다.

    Haskell에는 형식 생성자가 있습니다. 와이즈 비즈  하나입니다. 함수 값에 적용 방법을 정의하는 함수 유형이있는 것처럼 유형 생성자에는 적용 방법을 결정하는 "함수"종류가 있습니다. Rand 와 같은 일반적인 오래된 유형의 종류  또는 Int  철자를 쓴다 . String 의 종류 형식 생성자 인 * : 두 가지 유형이 있으며 그 유형을 생성합니다.

    Rand 를 적용하면   * -> * -> * 유형  그리고 Rand , 함수의 반환 유형을 얻습니다. g .

    자세한 내용은 Learn You A Haskell의이 장을 참조하십시오.

    ( "좋아,하지만 ... Gene 는 무엇인가 ? ", 당신이 묻는 소리를 들었습니다. Rand g Gene   Rand g Gene 를 생성하는 계산을 나타내는 값입니다.   Rand 를 실행할 수있는 무언가에서 실행하면   Rand g Gene 와 같은 것들 . 지금, 그것은 당신이 Gene 로 할 수있는 유일한 것은 아닙니다 그것이 Rand g 발생하기 때문에  dun dun dun... 모나드입니다! 이 개념에 대해 더 많이 알고 싶다면 LYAH와 같은 내용을 읽어야합니다. 초보자에게 전체를 설명하기위한 많은 준비가 있습니다.)

    runRand

  • 이전 unity3d - Unity의 iOS에 대한 Google Firebase 빌드 오류
  • 다음 이 사용되지 않는 기능을 해결하는 방법 각 PHP.