제가 이 질문에 혹시 발생할 가능성이 있다는 것을 알고 있는 주제를 벗어난 것으로 볼 수 있으며, 따라서 주관적인 것이 아닌, 어쩌면 프로그래머에게는 마이그레이션된 확보하십시오 할꺼이나 단힌 바란다.
특히 내 전문가판 배경은 대부분 OO 하는 것으로 나타났습니다. 가장 많이 가지고 있는 곳으로, ve 협력했습니다 I& # 39 의 표준 현대 교리 잘라냈다. 민첩한 청소하십시오 코드, TDD, etc. 몇 년 후 제대로 된 존 (zone) 는 일본 내 말해둘꼐요 이런 식으로. 특히 있다는 생각에 " good"; 코드를 자체 문서화 한다. # 39 를 사용하여 작업할 수 있는, ve 되도륵 i& IDE 는 매우 길고 자세한 메소드 이름을 설명식 비 문제 분석 도구를 사용하는 지능형 자동 완성, 엄청난 어레이입니다 서명을 탐색을 위한 패키지 및 심볼에는. eclipse 의 추론 방법을 통해 어떤 조치를 취할 수 있다면 좋겠지만, 히트 Ctrl+Space 관심용 보았으매 storagex 의 이름과 로칼에서 범위지정 com/go/4e6b330a_kr 연관됨 색상에는 인수만 대신, m 로, # 39 를 잡아 당겨 javadoc I& 행복한 비호환성의 피그야 있는 고물.
이는 커뮤니티 단호히 일부가 아닌, best practice 를 하스켈. 많이 읽고, ve i& # 39 이 문제에 대한 다양한 의견이 있을 수 있는 것으로 알고 있는데 그 간결, 하스켈, 및 커뮤니티 " pro". # 39, ve gone i& 통해 [읽는 방법을 하스켈] (http://www.haskell.org/haskellwiki/How_to_read_Haskell # General_advice), 그리고 난 뒤에 대한 근거 없는 것은 아니지만, 많은 决策 doesn& # 39 그들 마음에 든다. # 39, t 등의 재미있는 문자 하나 변수 이름을 aren& 가져다줄래요. 내가 할 수 있는 모든 사실을 I& # 39, 곧 적응할 수 있는 경우 해킹 욕금지 간직하고 싶다
하지만 난 can& # 39, 함수 서명을 통해 수 없다. 예를 들어 시행하십시오 가져오기되었습니다 [학습 너희에의 하스켈 [.]] 로 (http://learnyouahaskell.com/syntax-in-functions), s & # 39 섹션에 함수은 문법:
bmiTell :: (RealFloat a) => a -> a -> String
bmiTell weight height
| weight / height ^ 2 <= 18.5 = "You're underweight, you emo, you!"
| weight / height ^ 2 <= 25.0 = "You're supposedly normal. Pffft, I bet you're ugly!"
| weight / height ^ 2 <= 30.0 = "You're fat! Lose some weight, fatty!"
| otherwise = "You're a whale, congratulations!"
저도 잘 압니다 이 어리석은 예제에서와 설명하는 것을 목적으로 만든 경비 및 클래스용 불과 구속, 해당 기능을 검사할 수 있는 서명입니다 신앙이니라 조교하실 됩니다 그냥 아무 생각이 있는 높이 포지셔닝합니다 무게 또는 그 인수를 위한 것이었다. 부동 소수점 '또는' 더블 '대신' 조교하실 경우에도 사용할 수 없는 것이 바로 보고 알 수 있는 모든 유형의 여전히.
처음에는 할 줄 알았는데 약간만이라도 귀여운 및 여러 개의 클래스를 사용하여 해당 변수 이름은 더 이상 영리하고 기발한 속임수 유형 및 제약 조건:
bmiTell :: (RealFloat weight, RealFloat height) => weight -> height -> String
이 오류가 외쳤던 아웃해야 (표시됨과 것 있으면 누구나 할 수 있는 오류를 설명하란말야 다는일은, I& # 39; d 감사하):
Could not deduce (height ~ weight)
from the context (RealFloat weight, RealFloat height)
bound by the type signature for
bmiTell :: (RealFloat weight, RealFloat height) =>
weight -> height -> String
at example.hs:(25,1)-(27,27)
`height' is a rigid type variable bound by
the type signature for
bmiTell :: (RealFloat weight, RealFloat height) =>
weight -> height -> String
at example.hs:25:1
`weight' is a rigid type variable bound by
the type signature for
bmiTell :: (RealFloat weight, RealFloat height) =>
weight -> height -> String
at example.hs:25:1
In the first argument of `(^)', namely `height'
In the second argument of `(/)', namely `height ^ 2'
In the first argument of `(<=)', namely `weight / height ^ 2'
정보 기술을 사용할 수 있는 방법은 없는 함수 서명을? 하스켈 Way" ", 이 있다. 간단히 해덕 말도 안 되는 일들이 아웃해야 설명하였노라?
문자 서명입니다 아닙니다 jave 스타일 서명입니다. 어떤 한 jave 스타일 서명입니다 알려드립니다 파라메트가 높이 때문에 무게 및 원하는거요 디렉토리에만 혼합합니다 &prs. 이름과 &prs. 유형. 일반적으로, 하스켈, t can& # 39 이 기능을 사용 할 수 있기 때문에 정의됩니까 패턴 매칭 및 여러 방정식입니다 같이.
map :: (a -> b) -> [a] -> [b]
map f (x:xs) = f x : map f xs
map _ [] = []
이 이름은 'f' 와 '의 첫 번째 매개변수에서 첫 번째 방정식입니다 _' (꽤 많은 unnamed" 있는 고말은 ";) 두 번째. T , # 39 번째 매개 변수 중 하나로 이름을 방정식입니다 doesn& 있다. 정보기술 (it) 의 첫 부분에 이름을 가지고 있지만 (그리고 아마도 프로그래머용 xs list" " 생각하면 됩니다;;), 동시에 두 번째 it& # 39 에 완전히 ipv6-literal. 표현식입니다.
concat :: [[a]] -> [a]
concat = foldr (++) []
우리에게 알려 서명입니다 유형 [[a]] '유형' 매개변수입니다 걸리는 것을 있지 않지만, 이름을 어디든요 시스템의 매개변수입니다 나타납니다.
개별 방정식입니다 외부 함수, 어쨌든 그 이름을 으로 문서용으로 제외) 을 가리키는 인수만 관계가 없는 사용한다. 결국 한 이후 정식 name" "; # 39, s, t # 39 의 function& isn& 매개변수입니다 잘 정의되어 있는 정보에 대한 배치하십시오 ", 하스켈, '' 의 첫 번째 매개 브미텔 seabreeze 무게 있고, 두 번째 seabreeze height". 유형 (type) 가 아닌 붽뎄 서명입니다.
I agree 밀어버릴꺼에요 그게 함수 높여줍니까 &solarisdvd " public" cystal 선택해제합니다 합니다;; 이에 대한 정보를 사용할 수 있습니다. 즉, 자바 가상 머신 (jvm) 에 function& # 39 의 이름, 매개변수입니다 종류와 명칭. 사용자가 필요한 경우 (일반적으로) 보다 많은 정보를 추가할 수 있는 정보기술 (it) 의 문서. # 39 에 대한 정보 공개, 하스켈 기능은 function& 이름 및 &prs. 유형. 만약 사용자가 보다 많은 정보를 추가할 필요가 있는 정보기술 (it) 의 문서. 하스켈 같은 주 ide 를 무난히 이카사 보여줄 해덕 설명.
참고로, 우선 먼저 할 일이 강한 타입 시스템, s # 39 와 같은 언어로 표현 할 수 많은 오류뿐만 Haskell& 시도하시려면 종종 오류가 발견되지 형식. 따라서 같은 기능을 하도록 즉시 세트 '경고' 브미텔 예증들을 오프하도록 다는일은, 원인은 다음과 같습니다.
이것은 종종 한 심아이엔큐 그렇게 할 수 있는 타입 안전 증가되지는 월간 뉴타입 흔한데, 링크를 찾을 수 없습니다. 내가 이 생각을 가지고 있는 것처럼, t really don& # 39 라는 매개변수입니다 만드는 것이 훨씬 더 함께 할 것을 명시적으로 seabreeze , 높이 약 datatype 아닌 다른 수량 숫자로 평가할 수 있습니다. 그래서 나는 , # 39 만 t 에 등장하고 있는 월간 뉴타입 값을 wouldn& 콜; 월간 뉴타입 가치를 높이 나는 attaboy 를 사용하여 데이터를 통해 언제 어디서나 내가 약간만이라도 물론 주위에 등 여러 데이터 및 반군지역 세로폭 아니라 도왔으매 들어가서 타입 안전 (및 문서) 급여금 변경됩니다. 꼭 이래야겠어요 풀다 만 가치를 전달할 때 번호를 데릭쉐퍼드와 기초형상 붙여넣습니다 迈向 생각하신거야 대한 연산을 숫자임 아니라 높이 (산술 연산을 브미텔 δ1 '등').
참고로 이 주님으로부터그에게 런타임용으로 개발하십시오 오버헤드에. 월간 뉴타입 동일하게, 데이터 " inside" 표시됩니다. 이 때문에 랩 (wrap) 의 기본 표현 및 월간 뉴타입 래퍼 / 풀다 작업은 ops 없습니다. 재거됨 컴파일하는 동안 뿐입니다. 그러나 이들 문자는 문자 새롭게 전용 추가 소스 코드를 정확히 , 문서 you& 수 있다는 이점도 있다 # 39 를 집행한 컴파일러는 하고 있다. Jave 스타일 서명을 했지만, 여전히 파라메트가 무게, 이는 말할 수 있는 높이 컴파일러와의 won& 실수로 잘못된 방식으로 그들을 # 39, t be 말할 수 있을 지 약!
여러 가지 방법에 따라 어리석은 및 / 또는 현학적 가져올 수 있는 유형.
예를 들어, 이렇게 할 수 있다.
type Meaning a b = a
bmiTell :: (RealFloat a) => a `Meaning` weight -> a `Meaning` height -> String
bmiTell weight height = -- etc.
bmiTell :: (RealFloat weight, RealFloat height, weight ~ height)
=> weight -> height -> String
bmiTell weight height = -- etc.
조금 더 합리적인 약간만이라도 이:
type Weight a = a
type Height a = a
bmiTell :: (RealFloat a) => Weight a -> Height a -> String
bmiTell weight height = -- etc.
진짜 문제가 있다고 에로남이네 you& 추가 의미 내용을 같은 다른 값을 # 39, re 연결 유형, 이는 언어의 다형성 against the grain 것 같은, 자신과, 보통 성어는.
물론 그 단 한 가지 옵션 계약을 가치가없는 유형: com/go/4e6b330a_kr. 그러나 that& # 39 에 해당하는 큰 차이는 별로 없는 경우 같은 유형의 that& there& # 39 의 두 가지 않고, s # 39 에서 명백하네 they& 주문하십시오 # 39, re 주어진.
newtype Weight a = Weight { getWeight :: a }
newtype Height a = Height { getHeight :: a }
bmiTell :: (RealFloat a) => Weight a -> Height a -> String
bmiTell (Weight weight) (Height height)
This is nowhere near 로 할 수 있다, 내가 생각하는 일반적인 할 만하다. # 39 의 입력 (ha, ha) 추가 it& 조금 더 자세히 심지어 서명을 할 뿐만 아니라 it 는 사용자 유형에 따라 잡을 수 있습니다 - 유형 동의어 확장됨 유형을 사용하여 무게를 검사기에서 실수로 높이, 또는 이러한. '와' 제너레이리즈드뉴티페데리빙 확장명은 자동 인스턴스들도 can& # 39, 심지어 문자용 클래스가 가져올 수도 있습니다 보통 파생됨 수 없다.
그뿐 아니라 선수단 해덕 및 / 또는 함수 방정식 (바인딩한 이름을 셨으며) 할 만한 내가 what& # 39, 상황을 잘 알 수 있다. 그래서, 해덕, 개별 매개변수입니다 같은 수 있습니다.
bmiTell :: (RealFloat a) => a -- ^ your weight
-> a -- ^ your height
-> String -- ^ what I'd think about that
그래서 it& # 39 의 문제가 아니라 모든 물건을 텍스트 물방울 설명했다.
그 이유는 해당 기능은 # 39 는 com/go/4e6b330a_kr didn& 너회의 귀여운 유형, 빗나갔다.
(RealFloat a) => a -> a -> String
하지만 당신의 변화를 시도했다.
(RealFloat weight, RealFloat height) => weight -> height -> String
이 것과 같습니다.
(RealFloat a, RealFloat b) => a -> b -> String
따라서 이 유형에 서명입니다 인수만 %s/dbase/ext_table. 유형, 하지만 당신은 할 수 있을 것이라고 처음 두 개의 서로 다른 것으로 결정했습니다 GHC (따라 사용) 이 같은 합니다 유형:. 그렇게 또 있다고 판단할 수 없다는 '와' 높이 '이' 무게:3.67kg 동일한 유형의 않더라도 반드시 (즉, 해당 기능을 사용할 수 없는 만큼 엄격한 유형으로 제안된 서명입니다 잘못된 것입니다).
'수' 에 무게 때문에 그 같은 유형 '높이' you& # 39 석, re (no 암시적입니다 방송). '높이' 고말은 they& 무게:3.67kg ~ # 39, re 같은 유형:. 결론이 어떻게 설명할 수 있는데 이것은 조금 정보기술 (it) 에서 ghc 큐피드라는 ~ 높이 ',' 무게:3.67kg 미얀요 필요했다. 하고 싶은 것이 어떤 의미인지 알 수 있습니다 / 구문을 사용하여 가족 확장명은) 의 유형 (type:
{-# LANGUAGE TypeFamilies #-}
bmiTell :: (RealFloat weight, RealFloat height,weight~height) => weight -> height -> String
bmiTell weight height
| weight / height ^ 2 <= 18.5 = "You're underweight, you emo, you!"
| weight / height ^ 2 <= 25.0 = "You're supposedly normal. Pffft, I bet you're ugly!"
| weight / height ^ 2 <= 30.0 = "You're fat! Lose some weight, fatty!"
| otherwise = "You're a whale, congratulations!"
그러나 이 isn& # 39, t 목표 중 하나. 하스켈 는 very 염두에 둬야 할 수 있습니다, 그리고 다른 패러다임을 랑하니 빈틈없어야 않도록 선반가공 백업하도록 중요하다는 것을 가정하고 다른 언어로 frequencyid 중요하다. # 39, re 바깥쪽인지가 you& 틀렸다니까 com/go/learn_fl_cs4_learningas2_kr 때 가장 편안한. # 39 의 it& 선반가공 up in the city) 는 캐나다 토론토, 런던에서 같은 사람이 많다고 주장하고 있으며, 이들 거리에 있기 때문에 모든 사람이 없기 때문에 혼란을 하였노라너희가 런던은 토론토 에서 같은 지정값이 정격 거리로 나섰다. # 39, re 호출하십시오 난독화 호출됨 선명도 의해 어떤 you& 해스컬러스.
스케쳐내 반환되기를 목적, 사람에 따라 선택할 수 있기 때문에 보다 선명한 객체중심형 브미텔 작동합니까 그냥
data Person = Person {name :: String, weight :: Float, height :: Float}
bmiOffence :: Person -> String
bmiOffence p
| weight p / height p ^ 2 <= 18.5 = "You're underweight, you emo, you!"
| weight p / height p ^ 2 <= 25.0 = "You're supposedly normal. Pffft, I bet you're ugly!"
| weight p / height p ^ 2 <= 30.0 = "You're fat! Lose some weight, fatty!"
| otherwise = "You're a whale, congratulations!"
이, I believe 는 일종의 OOP 의 선택해제합니다 방법으로 만들 수 있습니다. 정말 don& # 39, OOP 방법을 사용하여, re t believe you& # 39 이 정보를 얻을 수 있어야 합니다 인수만 너회의 유형을 사용하여 선명도를 높이기 위해 비밀리에 매개변수 이름 대신 유형 및 it& # 39 의 공정한인가요 기대하기 어려운 때 선형보간 아웃해야 판독값 &prs. 이름을 알려 줍니다 매개 변수 이름은 하스켈 사용자의 질문이예요 [지켜보리니 * 아래] 는 매우 유연하고 강력한 유형 시스템의 # 39, 하스켈, 제발 don& 포기하지 않기 때문에 그냥 it& # 39 의 xam 소외 당신꺼에요.
우리가 할 수 있는 것을 볼 수 있는 유형을 진짜 원한다면 당신꺼에요:
type Weight = Float -- a type synonym - Float and Weight are exactly the same type, but human-readably different
type Height = Float
bmiClear :: Weight -> Height -> String
....
type FilePath = String
writeFile :: FilePath -> String -> IO () -- take the path, the contents, and make an IO operation
이로써 선명도를 조교하실 다음날이야 그러나 it& # 39 것 같은 느낌을 받았다고 한다.
type FilePath = String
타입 안전, 그리고 그 가깝다.
newtype FilePath = FilePath String
심지어 보다 스마트하며 약간만이라도 또는 무언가 더 좋은 아이디어입니다. # 39 의 Ben& 지켜보리니 유형에 대한 안전 문제에 대한 매우 중요한 점.
[*], 할 수 있는 크시 t 확인 없이 &prs. 이름이지만 크시 대화형 개발 및 내려받습니다 유형: 서명입니다 캐비닛용입니다 소스 코드의. # 39, t, 또는 모듈 라이브러리가 shouldn& 해키 콩지름에 믿기지 않을 정도로 가벼운 구문 해덕 문서용으로 임상의들의 문서화되지 않은 및 시스템 및 설치처 해덕 로칼에서. # 39 더 할 수 있는 합법적인 버전니다 너회의 불만입니까 약간만이라도 isn&,) 는 인쇄 명령을 v 대한 소스 코드를 사용하는 함수가 브미텔. 하스켈 같은 문제가 될 수 있는 코드를 제안하세요 메트릭에 짧은 계수로 (내 경우에는 반드시 코드를 avamer OO 또는 비사양 oo 내가 찾을 비해 약 10 개), 따라서 합리적인 정의마다 δ1 그치 보여주는 경우가 많습니다. 피쳐보다 제출 요청을 해야 한다.
두 개의 인수 however 피플링 관련된 기능이 없는 것 같습니다. 많이 많이 발생하는 경우, 함수 및 인수만 유형이 비슷한 규모의 데이터 구조를 정의할 수 있을 것인지, 아니면 그냥 의 오더할 나타내는 저들이요 예를 들어,
data Body a = Body {weight, height :: a}
bmiTell :: (RealFloat a) => Body a -> String
이제 인컨텍스트 쓰기
bmiTell (Body {weight = 5, height = 2})
또는
bmiTell (Body {height = 2, weight = 5})
이를 제대로 읽어야 할 수 있는 규모의, 그리고 아무한테도 명백하네 데이메드 모두 제거되었다.