아마도 및 둘 중 하나의 함수를 일반화하는 함수가 haskell에 있습니까?
예를 들어, 다음과 같은 함수를 상상하고 있습니다.
generalizedFunc :: SOMETHING m => b -> (a -> b) -> m a -> b
generalizedFunc valForError f value = ...
ghci에서 작업하는 것은 다음과 같습니다.
> generalizedFunc "bye" (\_ -> "hello") (Just 3)
"hello"
> generalizedFunc "bye" (\_ -> "hello") Nothing
"bye"
> generalizedFunc "bye" (\_ -> "hello") (Right 3)
"hello"
> generalizedFunc "bye" (\_ -> "hello") (Left "error")
"bye"
참고 : Tom Ellis는 이것이 Either의 일반화가 아니라 전문화라는 좋은 지적을합니다.
예. 당신이 찾고있는 것은입니다 Data.Foldable
. foldr
모든 대수 데이터 유형으로 일반화합니다 (목록의 경우).
Data.List.foldr :: (a -> b -> b) -> b -> [] a -> b
maybe :: b -> (a -> b) -> Maybe a -> b
either :: (a -> c) -> (b -> c) -> Either a b -> c
---
Data.Foldable.foldr :: Foldable t
=> (a -> b -> b) -> b -> t a -> b
코드가에서 generalizedFunc "bye" (\_ -> "hello")
로 변경 됩니다 foldr (\_ _ -> "hello") "bye"
. 컴파일러에게 foldr
from 을 의미하는지 확인하십시오 Data.Foldable
. 모듈 설명서를 참조하십시오.
안타깝게도 Foldable (Either a)
GHC 버전 에서 인스턴스가 누락되었을 수 있지만 직접 작성하는 것은 비교적 쉽습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다