의 조합 만들기 :를 Reader와 아마 모나드 (실용적은 Functor)
data MyData = Int Int
get2Sum :: Reader [Int] Int
get2Sum = do
myData <- ask
let fst2 = take 2 myData
case length fst2 of
2 -> return $ sum fst2
_ -> return 0
myDataFromApplicative = MyData <$> get2Sum <*> get2Sum
main = print $ runReader myDataFromApplicative [1,2]
그러나을 실행하면 뭔가 같은 내가 원하는 대신 나에게 MyData 0 0
을주는
runReader myDataFromApplicative [1]
그것은 나에게 Error
이 작업을 수행하기 위해 독자적인 독자적인 Monad를 만들면서 놀고 있었지만 실제로 이해할 수는 없었습니다.
은 내가 상상하는 것은 이런 일이 (분명히 이것은 단지 개요
data SuccessReader r a = Interm {runSuccessReader :: r -> SuccessReader a} | Success a | Error
throwError :: SuccessReader()
get2Sum :: Reader [Int] Int
get2Sum = do
myData <- ask
let fst2 = take 2 myData
case length fst2 of
2 -> return $ sum fst2
_ -> throwError
myDataFromApplicative = MyData <$> get2Sum <*> get2Sum
main = do
print $ runSuccessReader myDataFromApplicative [1,2]
print $ runSuccessReader myDataFromApplicative [1]
입니다있는 것 출력
Success MyData 3 3
Error