2015-01-03 3 views
3

저는 Haskell에서 임베디드 언어를 디자인하려고합니다. 가능하다면 병렬 처리에 사용자 정의 된 의미를 부여하고 싶습니다. 일반적으로 함수 응용 프로그램을 나타냅니다. 또는 대체로, 나는 정의 가능한 연산자 우선 순위가있는 공백 연산자를 정의하고 싶다.ghc에서 나란히 병치 할 수있는 방법이 있습니까?

뭔가 다음 3 4로 곱셈 3 * 4를 작성할 수 있습니다 것

() x y = x * y 

있다.

이것을 구현하기 위해 GHC에 확장 프로그램을 사용해야합니까?

+2

정상적인 기능을 어떻게 적용 할 수 있습니까? –

+0

(내 예제에서는) 두 개의 숫자와 같은 특정 유형에 대해서만 오버로드해야합니다. –

+1

형식 유추와 함께 작동하지 않습니다. –

답변

5

사실, 그렇습니다! ghci에서 다음

{-# LANGUAGE FlexibleInstances #-} 
module Temp where 

instance Num a => Num (a -> a) where 
    fromInteger n = (fromInteger n *) 
    n + m = \x -> n x + m x 
    -- ... 

:

λ :l Temp 
... 
λ 3 (4 :: Int) :: Int 
12 
λ let _4 = 4 :: Int 
λ 3 _4 :: Int 
12 
λ (3 + 4) (2 :: Int) :: Int 
14 

기호 0, 1 등 하스켈은 오버로드 - 0 :: Num a => a - 그들은 Num 인스턴스가 무엇을 나타낼 수 있습니다. 따라서 함수 Num a => a -> a에 대한 Num 인스턴스를 정의하면 3 :: Num a => a -> a

+1

'3 (4 :: Int) :: Int'는'3 * 4'에 비해 거의 이득이 아닙니다. –

+0

'3_4 :: Int'와 같이 결과를'Int'에 명시 적으로 캐스팅하지 않고도이 작업을 할 수 있습니까? –

+0

ghci에서만 유형 주석이 필요합니다. 소스 파일에서'twelve :: Int''12 = 3 4' – phadej

관련 문제