특정 조건이 주어진 경우 목록 끝에 0.0 또는 Nothing을 추가하는 함수를 만들려고했지만 컴파일러는 단순히 리터럴 번호를 목록에 추가하고 제목에 인용 된 오류를 반환합니다.
다음은 오류를 반환하는 코드입니다.
createDistList :: WAdjList -> Int -> Int -> [Maybe Float] -> [Maybe Float]
createDistList [] i j ys = if i == j then ys ++ [0.0] else ys ++ [Nothing]
코드는이를지나 확장되지만 동일한 컨텍스트에서 다시 발생하는 동일한 오류입니다.
문제는 ys
유형 [Maybe Float]
이 아니라 Float
. 0.0
type이 없다는 오류가 발생할 수 있습니다 Maybe Float
. 그러나 그것은 0.0
그 자체가 타입이 없기 때문에 그것 보다 더 복잡 합니다 Float
; 유형이 Fractional a => a
있습니다.
유형 클래스가 열려 있기 때문에 유형 검사기는 type 값을 제공 0.0
할 수 있다고 믿습니다 Maybe Float
. 하지만 그렇게하려면 .NET Fractional
용 인스턴스 를 정의해야합니다 Maybe Float
. 그렇지 않은 경우 오류 메시지가 알려줍니다.
해결책은 함수에 올바른 값을 제공하는 것입니다 : use Just 0.0
, not 0.0
.
createDistList :: WAdjList -> Int -> Int -> [Maybe Float] -> [Maybe Float]
createDistList [] i j ys = if i == j then ys ++ [Just 0.0] else ys ++ [Nothing]
또는 더 짧게,
createDistList :: WAdjList -> Int -> Int -> [Maybe Float] -> [Maybe Float]
createDistList [] i j ys = ys ++ [if i == j then Just 0.0 else Nothing]
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다