Butterfly는 내가 만들 언어 이름임.


목표: 수학적인 언어 만들기. 아마도 하스켈을 많이 본뜰 듯.


체계:


1. 모음

2. 클래스

3. 타입

4. 객체


1. 모음을 정의하는 법


collection <모음 이름>

{

    <요소 선언들 및 요소 정의들>

}


- C++의 네임스페이스와 비슷. collection1::element1으로 접근 가능.


2. 클래스를 정의하는 법


<클래스 이름> <옵션: 상속 클래스들>

{

    <메소드 선언들 및 메소드 정의들>

}


    - 임의의 타입에 대하여 클래스에서 정의되지 않은 모든 메소드가 선언되면 그 타입은 클래스의 원소로 간주됨.

    - object.method는 method object로 바뀜.

    예)

    arithmetic

    {

        a: default => plus: a -> a-> a. /* 여기서 a는 타입변수 */

    }

    3.plus 4은 int::plus 3 4로 바뀜.

    - x: S는 x가 S의 원소임을 나타냄.


3. 타입의 정의


set <옵션: 타입변수 선언> <타입> = <생성자 정의>; ...; <생성자 정의>.

또는

type <타입> = <기존의 타입을 이용한 새로운 타입>.


4. 객체: 아마도 함수.


object <객체이름> : <타입>

{

    <내용: 함수 정의(예: 패턴 매칭, 람다식 등) 및 서브 함수 정의>

}


    - 서브 함수는 function::sub로 다른 함수에서 사용 가능.