map zipWith
과 같은 기능이 있다고 가정하면 어떻게 그 유형을 결정할 수 있습니까? zipWith
의 유형 (a -> b -> c) -> [a] -> [b] -> [c]
것을 감안할 때 map
의 내가 zipWith sum
같은 기능의 유형을 결정 어떻게 마찬가지로함수 유형을 어떻게 결정합니까?
(a -> b) -> [a] -> [b]
입니까?
map zipWith
과 같은 기능이 있다고 가정하면 어떻게 그 유형을 결정할 수 있습니까? zipWith
의 유형 (a -> b -> c) -> [a] -> [b] -> [c]
것을 감안할 때 map
의 내가 zipWith sum
같은 기능의 유형을 결정 어떻게 마찬가지로함수 유형을 어떻게 결정합니까?
(a -> b) -> [a] -> [b]
입니까?
당신은, :t
와 GHCi의 유형을 확인할 수 있습니다 사용할 수 있습니다. 자신을 알아 내려고 시도하려면 적절한 유형으로 대체해야합니다. 첫 번째 예제에서, 우리는 map
의 첫 번째 인수는 하나 개의 인수의 함수이다
zipWith :: (a -> b -> c) -> [a] -> [b] -> [c]
및
map :: (a -> b) -> [a] -> [b]
, 그래서 우리는 함수로 zipWith
을 생각해야 :
zipWith :: (a -> b -> c) -> ([a] -> [b] -> [c])
(위의 유형은 원래의 것과 같습니다. 즉 zipWith
은유형의 인수를 사용하는 함수를 변환합니다. a
및 b
의 목록을받는 함수에 10 b
)
map
뿐만 아니라 하나 개의 인수의 함수로 볼 수 있습니다. 이제
map :: (a -> b) -> ([a] -> [b])
, 우리는 map
년대의 형식을 기입 결과 유형 - a
은 a -> b -> c
되고 b
는 [a] -> [b] -> [c]
된다 :
map zipWith :: [a -> b -> c] -> [[a] -> [b] -> [c]]
PS : 당신을합니까 함수 목록을 인수로 취하는 함수가 정말로 필요합니까? 당신은 단지 해당 요소를 추가하는 두 개의리스트를 압축 할 경우에 당신은
zipWith (+) :: Num c => [c] -> [c] -> [c]
보다는 zipWith sum
당신은 ghci의 유형을 볼 수 있습니다
ghci> :t map zipWith
map zipWith :: [a -> b -> c] -> [[a] -> [b] -> [c]]
마찬가지로 zipWith sum
을 위해 :
ghci> :t zipWith sum
zipWith sum :: Num (b -> c) => [[b -> c]] -> [b] -> [c]
후자의 타입은 아마 당신이이 것을 적용하자마자 좋은 에러를 일으킬 것입니다. :) – Ingo
무엇 ghci
것은 거기에있다! 또는 당신은 다른 답변에서 언급 한 바와 같이 tryhaskell.org
> :t map zipWith
:: [a -> b -> c] -> [[a] -> [b] -> [c]]
ghci를 체크인하는 것에 관한 질문입니까, 아니면 손으로 확인하고 싶은가요? – nponeccop