>

I 가지고이 매퍼 타이프의 함수

type Mapper<TSource, TDestination> = (fn: (source: TSource) => TDestination, source: TSource[]) => TDestination[];
const mapper: Mapper<number, string> = (fn: (a: number) => string, source: number[]): string[] => {
  return source.map(n => fn(n));
}
const nums = mapper(n => n.toString(), [1,2,3, 4]).join(" ");
console.log(nums);

현재 Haskell에 대해 읽고 있으며 Haskell에서 어떻게해야하는지 궁금합니다.

이 유형 정의는 hoogle에서 찾았습니다 :

map :: (a -> b) -> [a] -> [b]

instance 를 사용해야합니까?  구체적인 유형을 추가하거나 더 짧은 방법이 있습니까?


  • 답변 # 1

    첫 줄은 Mapper 라는 이름을 가진 타입 별칭입니다.   map 의 유형에 . Haskell에서는 다음과 같습니다.

    type Mapper a b = (a -> b) -> [a] -> [b]
    
    
    그런 다음 mapper 라는 함수를 정의합니다.  그것은 map 와 같습니다. . 하스켈에서 그것은 mapper = map 입니다 하지만 앞에 유형 서명을 추가 할 수도 있습니다 :

    mapper :: Mapper a b
    mapper = map
    
    
    물론 pyzwyz  함수는 실제로 어떤 목적으로도 사용되지 않으며 mapper 를 사용할 수도 있습니다.  직접 입력했지만 원래 TypeScript 코드에는 이미 적용되었습니다.

    map 에 해당하는 Haskell   n => n.toString() 입니다  그리고 show 와 동등   join 입니다   intercalate 에서 그래서 우리는 얻는다 :

    Data.List
    
    

    그리고 import Data.List (intercalate) nums = intercalate " " $ mapper show [1, 2, 3, 4]  그냥 console.log 입니다 그래서 :

    putStrLn
    
    
    main = putStrLn nums

관련 자료

  • 이전 c# - 여전히 BackgroundWorker에서 값을 반환하는 방법을 얻지 못함
  • 다음 python - tkinterfiledialog에서 askopenfilename을 사용하면 최상위 레벨 창이 사라집니다