2
이 프로그램에는 인터페이스 IPoint과 인터페이스 동작을 구현하는 기능 포인트 (C++의 클래스 역할을 함)가 있습니다. 함수 포인트가 IPoint를 구현하지만 그렇게 할 수 없다는 것을 선언하는 많은 방법을 시도했다.OO 하스켈에서 인터페이스 구현
{-# LANGUAGE EmptyDataDecls, TypeOperators, FlexibleContexts, FlexibleInstances,UndecidableInstances, MultiParamTypeClasses, ScopedTypeVariables, DeriveDataTypeable, TemplateHaskell #-}
{-# OPTIONS_GHC -fcontext-stack=100 #-}
module Point where
import OOHaskell
$(label "read'")
$(label "load")
$(label "incr")
type IPoint a =
Record (Read' :=: IO a
:*: Load :=: (a-> IO())
:*: Incr :=: IO()
:*: HNil)
--point value self = self :: IO (IPoint a)
point value self
= do
valueRef <- newIORef value :: IO (IORef Integer)
returnIO $
read' .=. readIORef valueRef
.*. load .=. (\v -> writeIORef valueRef v)
.*. incr .=. modifyIORef valueRef (+1)
.*. emptyRecord
어떻게 기능 점수가 IPoint를 구현하도록 지정할 수 있습니까 ??