2013-01-22 3 views
4

방금 ​​Haskell을 배우기 시작했습니다. "How do you a Haskell for Great Good". 현재 "Types and Typeclasses"장을 읽으므로 내 지식이 거의 존재하지 않습니다. SublimeHaskell 패키지와 함께 Sublime Text 2를 사용하여 모든 저장시 파일을 빌드/확인합니다.Haskell 함수 타입 선언에서 String 대신 [Char]를 사용하는 것은 좋지 않은가요?

문제 :

funcName :: [Char] -> [Char] 

나는이 경고를 받고 있어요 : 나는이 같은 기능 유형 선언을 만들려고 노력하고있어

경고 : 사용 문자열 찾았 [샤아] -> [Char] 이유 : 문자열 -> 문자열

빌드 FAILED

왜 String 대신 Char 배열을 사용하거나 가능한 반향 등의 설명에 대한 링크를 제공하는 것이 나에게 설명 할 수 있습니까? 나는 봤지만 아무것도 발견하지 못했습니다.

P. 저는 C# 개발자입니다. 문자 배열과 C 언어와 같은 문자열의 차이점을 이해합니다.

+5

'[Char]'와'String'은 같은 것입니다. SublimeHaskell이 어떤 일을하는지 모르겠지만, 코드에서 일종의 lint-type 검사를 실행하고 있다고 생각합니다. –

+1

이제 학습하면서 잡음을 줄이기 위해 메모장 ++ 및 ghci 만 사용하려고합니다. 감사. –

+2

하스켈에 능숙해질 때 심각한 코딩을 위해'Text'를 사용해야합니다. 더 나은 공간 효율성과 성능을 제공합니다. 게으른 목록은 데이터 구조보다 나은 제어 구조입니다. –

답변

13

어딘가에 기본 라이브러리에이 정의를 찾을 수 있습니다. 두 가지 중에서 선택하는 것은 문서 선택입니다. 종종 다음과 같은 유형 별칭을 정의합니다.

type Domain = ByteString 
type UserName = Text 

문서화를 위해 유형을 사용하는 것이 좋습니다.

중요한 보조 노트로 [Char]은 문자 배열이 아닌 문자 목록입니다. 실제 배열 유형이 있기 때문에 구분이 중요합니다!

+0

추가 도움말을 보내 주셔서 감사합니다. –

+0

또한 별칭을 사용하면 가끔씩 리팩터링을 쉽게 할 수 있습니다. 나중에 코드. 형식 별칭으로 함수를 리팩터링 할 때 유형 서명이 그대로 유지되는 동안 구현 만 리팩토링하면됩니다. – Laar

7

String[Char]의 유형 별칭에 지나지 않으므로 둘 사이에는 실용적인 것이 없습니다. 단지 가독성 문제입니다.

type String = [Char] 

String[Char] 정확히 똑같은 것을 말한다 :

4

코드에서 자동으로 HLint를 실행하고 있으며 모든 HLint 경고를 치명적인 오류로 간주합니다. the HLint author says "맹목적으로 HLint의 출력을 적용하지 마십시오." String[Char]은 완전히 똑같습니다. 모두가 말했듯이 그것은 더 멋지게 보입니다. 블록 (대개의 경우)으로 처리하려는 연속 문자 목록에서 작동하는 경우 String을 사용하는 경향이 있으며 문자가 실행에 조합 된 의미가 없으면 (예 : 훨씬 희귀 한) [Char]을 명시 적으로 사용하십시오. . HLint는 모든 힌트를 오류 (수정) 및 경고 (생각)로 나눕니다. 따라서 오류 힌트에 실패하면 빌드하는 것이 가장 좋을 수도 있습니다.

+0

매우 유익하고, 제 경우에 매우 유용합니다. 고맙습니다. –