2016-07-22 2 views
1

단위 벡터를 나타내는 유형을 정의하고 싶습니다.Elm에서 유형 값 제한

type UVec = UVec Float Float 

unit : Float -> Float -> UVec 
unit a b = 
    let 
    norm = sqrt (a^2 + b^2) 
    in 
    UVec (a/norm) (b/norm) 

unit 내가 원하는 것을 얻을 수 있지만, 나는 UVec 프로그램의 다른 부분에서 단위 벡터가 항상 보장의 방법이 없습니다 :

이 내가 현재 가지고있는 것입니다. 예를 들어, I는 다음과 같이 쓸 수있다 :

wrong = UVec 100 200

을 그리고 그것은 잘 컴파일합니다.

unit 함수를 UVec 유형의 단독 생성자로 만들 수있는 방법이 있습니까? 또는 UVec의 값을 제한하는 몇 가지 방법이 있습니까?

+1

하고, 'unit' 함수 만 내 보냅니다. 다른 모듈이 볼 수있는 유일한 것입니다. – marcosh

답변

4

당신은 모듈에 UVec를 배치하고 단지 당신이 원하는 노출 수 : 그건 당신이 값을 검색 할 수 있습니다 위의 생성자를 노출하지 않기 때문에

module UnitVector exposing (UVec, unit, values) 

type UVec = UVec Float Float 

unit : Float -> Float -> UVec 
unit a b = 
    let 
    norm = sqrt (a^2 + b^2) 
    in 
    UVec (a/norm) (b/norm) 

values : UVec -> (Float, Float) 
values (UVec a b) = 
    (a, b) 

내가하는 기능을 추가했습니다 .

는 같은 것으로 모듈 라인을 바꿀 것, 당신이 실제로 UVec Float Float 생성자를 노출하고 싶어했다 : 아마 당신이 별도의 모듈에`UVec` 유형과`unit` 기능을 가질 수

module UnitVector exposing (UVec(UVec), unit, values) 
+0

다른 모듈을 추가하지 않고도이 작업을 수행 할 수 있기를 기대했지만이 방법이 필요합니다. 감사! – user38602