2014-02-07 3 views
1

사용할 데이터 유형이 확실하지 않은 문제가 있습니다. 현재 나는 Array2D<'T>으로 갔지만, 앞으로 다른 컨테이너를 사용하기 위해 내 마음이 바뀔 수도 있습니다. C++에서는 인스턴스 메소드를 사용할 것이고, 언제든지 변경할 수있는 typedef을 사용할 수 있습니다 (새 컨테이너가 필요한 모든 메소드를 지원하는 한). 이렇게하면 깨끗한 추상화 계층을 제공하여 내가 적합하다고 생각하는대로 변경할 수 있습니다.깨끗한 추상화 레이어 만들기

어떻게 F #에서 비슷한 작업을 수행 할 수 있습니까? typedef에 대한 용도가 있습니까? 이것이 하스켈의 '더 높은 종류의 유형'을 사용하는 것입니까? 사용중인 모든 방법 당신은 'T> 사방 후 실제 구현을 대체합니다 MyType <를 사용할 수 축약 된 형태의

type MyType<'T> = Array2D<'T>

에 동일한 경우

+0

.NET의 문제는 동일한 방법으로 유형을 찾는 것이 어렵다는 것입니다. [이 프로젝트] (https://github.com/gmpl/FSharpPlus/blob/bb60400df656bf848a0de2d4503783b4b034b773/src/FSharpPlus/Operators.fs#L250) (컬렉션 및 접이식 참조)에서 전환을 위해 초기 작업을 수행했습니다. 구현간에. 이 기술은 Haskell의 typeclasses와 유사합니다. – Gustavo

답변

2

Type abbreviations 작동 할 수있다. 컴파일시에 약어가 지워집니다.

Gustavo가 언급 한 것처럼 .NET에서 동일한 기본 유형/클래스에서 파생되거나 동일한 인터페이스를 구현하지 않는 한 동일한 메소드가 유형/클래스에 공통적이지 않습니다. 인터페이스를 직접 사용하십시오.

+0

필자는 필연적으로 인스턴스 메소드를 사용하지 않는 기능적 스타일에 대해 더 생각하고 있었다고 생각합니다. –

+0

다른 모듈을 열어 연산자를 재정의 할 수 있음을 알고 있지만 (http://stackoverflow.com/questions/2271198/f-checked-arithmetics-scope 참조), 시도하지 않았고 다른 모듈에서 작동하는지 여부를 모릅니다. 정적 메소드. 정확히 무엇을 달성하기를 원하는지에 따라 고차 함수도 고려해야합니다. –

관련 문제