SlideShare a Scribd company logo
Haskell
Study
7. module
Module
조금 큰 규모의 프로그램을 짜다보면 반드시 소스 코드를 각각의 역할에 맞게 분리해서 모듈화를
해야할 필요성이 생깁니다.
Haskell의 표준 라이브러리에는 이미 각각의 역할에 맞는 여러가지 모듈들이 있고, 각 모듈에 어떤
함수들이 있는지는 Hoogle등에서 검색을 통해 알아볼 수 있습니다.
이미 존재하는 다른 모듈을 쓰기 위해서는 import 구문을 씁니다.
import (module name)
Module
대표적으로 많이 쓰는 Data.List 모듈을 쓰는 예제입니다.
--test.hs
import Data.List
-- nub 함수는 리스트에서 중복되는 요소를 모두 제거합니다. Data.List에 정의되어 있습니다.
numUniques :: (Eq a) => [a] -> Int
numUniques = length . nub
Prelude> :l test.hs
*Main> numUniques [1,1,1,2,2,1,2,3,1,2,3]
3
Module
모듈에서 특정 몇 개의 함수만을 가져와서 쓰고 싶을 땐 다음과 같이 씁니다.
import Data.List (nub, sort)
특정 함수를 제외한 나머지를 모두 가져와서 쓰고 싶을 땐 다음과 같이 씁니다.
import Data.List hiding (nub)
Module
이름 충돌이 일어났을 땐 모듈을 명시적으로 포함(qualified import)할 수 있습니다. 이 경우 모듈
내의 함수를 쓸 때 앞에 모듈 이름을 붙여줘야합니다.
import qualified Data.List
numUniques :: (Eq a) => [a] -> Int
numUniques = length . Data.List.nub
모듈 이름이 너무 길어서 불편할 경우 별칭을 붙여줄 수 있습니다.
import qualified Data.List as L
numUniques = length . L.nub
Module
보통 자주 쓰이는 모듈들은 아래와 같습니다. 이 모듈에 어떤 함수들이 있는지 한 번쯤 훑어보시는
것도 좋습니다.
•	Data.List
리스트와 관련된 유용한 함수들이 많이 있습니다. sort, group, find, nub 등 일반적으로 리스트에
관해 많이 쓰는 함수들은 다 정의되어 있으니 리스트에 대해 뭔가 작업을 하고 싶다면 코드를 짜기
전에 동일한 함수가 이 모듈에 있는 지 한 번 확인해보시는 게 좋습니다.
•	Data.Char
문자 처리와 관련된 함수들이 모여있습니다. 역시 문자, 문자열 관련 작업을 할 땐 먼저 이 모듈 내의
함수를 살펴보시는 걸 권합니다.
•	Data.Map
타 언어의 map(tree 기반의 key-value 자료구조)와 동일합니다. key-value 쌍 자료구조가
필요하다면 Data.Map을 참고합시다.
Make Module
그러면 모듈을 만들기 위해선 어떻게 해야할까요? 간단한 예제를 통해 살펴봅시다. 우선, 모듈의
이름은 반드시 파일의 이름과 동일해야합니다.
파일의 맨 위에 module (module name) where 라고 써서 해당 파일의 모듈명을 명시해줄 수
있습니다.
--Test.hs
module Test where
foo = "foo"
bar = "bar"
Make Module
모듈 내부에서 특정한 함수들만 외부로 내보내고 싶다면(나머지 함수들은 모듈 내부에 정의되어
있어도 외부에서 쓰지 못하게 만들고 싶다면) 모듈 이름 옆에 해당 함수들의 이름을 적어주면 됩니다.
아무 함수도 적지 않을 경우 모듈 내의 모든 함수가 export됩니다.
--Test.hs - foo 만 외부에서 사용 가능
module Test (foo) where
foo = "foo"
bar = "bar"
Make Module
라이브러리를 만들 때는 보통 여러 개의 모듈이 필요하고, 각각의 모듈에 대한 서브모듈
(submodule)이 필요할 때도 많습니다. 이럴 때 Haskell에서는 모듈을 디렉토리 상에서 계층
구조로 나눠 관리하며, 각 서브 모듈은 (자신이 속한 폴더의 이름).(모듈 이름) 형태의 이름을 붙여
관리합니다.
--Test.hs - foo 만 외부에서 사용 가능
module Test where
import Test.Foo
--Test 폴더의 Foo.hs 파일
module Test.Foo (foo) where
foo = "foo"

More Related Content

PDF
Haskell study 4
PDF
Haskell study 8
PDF
Haskell study 13
PDF
Haskell study 5
PDF
Haskell study 12
PDF
Haskell study 10
PDF
Haskell study 6
PDF
Haskell study 14
Haskell study 4
Haskell study 8
Haskell study 13
Haskell study 5
Haskell study 12
Haskell study 10
Haskell study 6
Haskell study 14

What's hot (20)

PDF
Haskell study 2
PDF
Haskell study 15
PDF
Haskell study 9
PDF
Haskell study 3
PPTX
파이썬 Numpy 선형대수 이해하기
PDF
Start IoT with JavaScript - 4.객체1
PDF
Start IoT with JavaScript - 5.객체2
PDF
Start IoT with JavaScript - 2.연산자
PPTX
파이썬 문자열 이해하기
PPTX
Python_numpy_pandas_matplotlib 이해하기_20160815
PPTX
파이썬+정규표현식+이해하기 20160301
PPTX
Matplotlib 기초 이해하기_20160730
PPTX
파이썬 문자열 이해하기
PPTX
[아꿈사] The C++ Programming Language 11장 연산자 오버로딩
PPTX
R 프로그래밍 기본 문법
PPTX
Processing 기초 이해하기_20160713
PPTX
Python+numpy pandas 2편
PPTX
Python array.array 모듈 이해하기
PPTX
파이썬+Operator+이해하기 20160409
PPTX
C# 세미나 12회차
Haskell study 2
Haskell study 15
Haskell study 9
Haskell study 3
파이썬 Numpy 선형대수 이해하기
Start IoT with JavaScript - 4.객체1
Start IoT with JavaScript - 5.객체2
Start IoT with JavaScript - 2.연산자
파이썬 문자열 이해하기
Python_numpy_pandas_matplotlib 이해하기_20160815
파이썬+정규표현식+이해하기 20160301
Matplotlib 기초 이해하기_20160730
파이썬 문자열 이해하기
[아꿈사] The C++ Programming Language 11장 연산자 오버로딩
R 프로그래밍 기본 문법
Processing 기초 이해하기_20160713
Python+numpy pandas 2편
Python array.array 모듈 이해하기
파이썬+Operator+이해하기 20160409
C# 세미나 12회차
Ad

Viewers also liked (20)

PDF
Show file
PDF
Investigación de gestión
DOCX
Tanzania's Southern Circuit Tourism Destinations Itinerary Options
DOCX
PDF
Old Dogs, New Tricks: Life After Launch
PPTX
八子クラウド座談会発表資料: ソラコムが創る日本初次世代IoTアーキテクチャ
PDF
PPTX
Creación de página web
DOCX
Langkah langkah belajar hostinger
PDF
Cte diagnóstico benito juárez
DOCX
Employee Evaluation final
PDF
AEL Equity Price Forecast - 29.01.2016
PDF
Caso Clínico: Uso da Cintilografia Miocárdica em Paciente com Arritmia Cardíaca
PDF
LTEモバイルクラウドセミナ[講演1] R 20101116
PPTX
Industry of Pakistan
PDF
第4回はじめてのAws jaws ug-iwata
PDF
JAWS-UG 磐田支部 第7回勉強会Agenda
PPT
Eop Auto Industry Of Pakistan
PPTX
PPt Presentation on CNS (AAI)
PPTX
Airports Authority of India Industrial Training Presentation
Show file
Investigación de gestión
Tanzania's Southern Circuit Tourism Destinations Itinerary Options
Old Dogs, New Tricks: Life After Launch
八子クラウド座談会発表資料: ソラコムが創る日本初次世代IoTアーキテクチャ
Creación de página web
Langkah langkah belajar hostinger
Cte diagnóstico benito juárez
Employee Evaluation final
AEL Equity Price Forecast - 29.01.2016
Caso Clínico: Uso da Cintilografia Miocárdica em Paciente com Arritmia Cardíaca
LTEモバイルクラウドセミナ[講演1] R 20101116
Industry of Pakistan
第4回はじめてのAws jaws ug-iwata
JAWS-UG 磐田支部 第7回勉強会Agenda
Eop Auto Industry Of Pakistan
PPt Presentation on CNS (AAI)
Airports Authority of India Industrial Training Presentation
Ad

Similar to Haskell study 7 (20)

PDF
Python3 6장 모듈만들기
PDF
XE 오픈 세미나(2014-04-26) - 김동현 "XE 코어 구조론"
PPTX
이펙티브 C++ (7~9)
PDF
Xe 구조에 대한 이해
PPTX
5.Spring IoC&DI(DI와 관련된 어노테이션)
PPTX
Holub on-patterns-2-1
PPTX
HolubOnPatterns/chapter2_1
PDF
STL study (skyLab)
PDF
[NEXT] Android 개발 경험 프로젝트 3일차 (Database)
PDF
QnA blog using Django - ORM, 회원가입, 로그인/로그아웃
PDF
Light Tutorial Python
PPTX
Programming java day2
PPTX
자바로 배우는 자료구조
PDF
7 8 1
PPTX
파이썬 함수 이해하기
PDF
[국비지원교육/재직자/실업자환급교육/IT실무학원추천/스프링교육추천]#5.스프링프레임워크 & 마이바티스 (Spring Framework, M...
PDF
Matlab guide
PDF
Atom package part1
PDF
Hive begins
PDF
XE 모듈 개발 - 걸음마부터 날기까지 - 걷기
Python3 6장 모듈만들기
XE 오픈 세미나(2014-04-26) - 김동현 "XE 코어 구조론"
이펙티브 C++ (7~9)
Xe 구조에 대한 이해
5.Spring IoC&DI(DI와 관련된 어노테이션)
Holub on-patterns-2-1
HolubOnPatterns/chapter2_1
STL study (skyLab)
[NEXT] Android 개발 경험 프로젝트 3일차 (Database)
QnA blog using Django - ORM, 회원가입, 로그인/로그아웃
Light Tutorial Python
Programming java day2
자바로 배우는 자료구조
7 8 1
파이썬 함수 이해하기
[국비지원교육/재직자/실업자환급교육/IT실무학원추천/스프링교육추천]#5.스프링프레임워크 & 마이바티스 (Spring Framework, M...
Matlab guide
Atom package part1
Hive begins
XE 모듈 개발 - 걸음마부터 날기까지 - 걷기

More from Nam Hyeonuk (16)

PPTX
Next 게임 실전 프로젝트 슬라이드
PDF
Haskell study 11
PDF
Haskell study 1
PDF
Haskell study 0
PDF
Multi thread
PDF
Memory & object pooling
PDF
Database
PDF
Exception&log
PDF
Iocp advanced
PDF
Iocp 기본 구조 이해
PDF
Tcp ip & io model
PDF
Effective c++ chapter 1,2 요약
PDF
구문과 의미론(정적 의미론까지)
PDF
Gpg 1.1
PDF
Stl vector, list, map
PDF
Age Of Empires II : Age Of Kings Postmotem
Next 게임 실전 프로젝트 슬라이드
Haskell study 11
Haskell study 1
Haskell study 0
Multi thread
Memory & object pooling
Database
Exception&log
Iocp advanced
Iocp 기본 구조 이해
Tcp ip & io model
Effective c++ chapter 1,2 요약
구문과 의미론(정적 의미론까지)
Gpg 1.1
Stl vector, list, map
Age Of Empires II : Age Of Kings Postmotem

Haskell study 7

  • 2. Module 조금 큰 규모의 프로그램을 짜다보면 반드시 소스 코드를 각각의 역할에 맞게 분리해서 모듈화를 해야할 필요성이 생깁니다. Haskell의 표준 라이브러리에는 이미 각각의 역할에 맞는 여러가지 모듈들이 있고, 각 모듈에 어떤 함수들이 있는지는 Hoogle등에서 검색을 통해 알아볼 수 있습니다. 이미 존재하는 다른 모듈을 쓰기 위해서는 import 구문을 씁니다. import (module name)
  • 3. Module 대표적으로 많이 쓰는 Data.List 모듈을 쓰는 예제입니다. --test.hs import Data.List -- nub 함수는 리스트에서 중복되는 요소를 모두 제거합니다. Data.List에 정의되어 있습니다. numUniques :: (Eq a) => [a] -> Int numUniques = length . nub Prelude> :l test.hs *Main> numUniques [1,1,1,2,2,1,2,3,1,2,3] 3
  • 4. Module 모듈에서 특정 몇 개의 함수만을 가져와서 쓰고 싶을 땐 다음과 같이 씁니다. import Data.List (nub, sort) 특정 함수를 제외한 나머지를 모두 가져와서 쓰고 싶을 땐 다음과 같이 씁니다. import Data.List hiding (nub)
  • 5. Module 이름 충돌이 일어났을 땐 모듈을 명시적으로 포함(qualified import)할 수 있습니다. 이 경우 모듈 내의 함수를 쓸 때 앞에 모듈 이름을 붙여줘야합니다. import qualified Data.List numUniques :: (Eq a) => [a] -> Int numUniques = length . Data.List.nub 모듈 이름이 너무 길어서 불편할 경우 별칭을 붙여줄 수 있습니다. import qualified Data.List as L numUniques = length . L.nub
  • 6. Module 보통 자주 쓰이는 모듈들은 아래와 같습니다. 이 모듈에 어떤 함수들이 있는지 한 번쯤 훑어보시는 것도 좋습니다. • Data.List 리스트와 관련된 유용한 함수들이 많이 있습니다. sort, group, find, nub 등 일반적으로 리스트에 관해 많이 쓰는 함수들은 다 정의되어 있으니 리스트에 대해 뭔가 작업을 하고 싶다면 코드를 짜기 전에 동일한 함수가 이 모듈에 있는 지 한 번 확인해보시는 게 좋습니다. • Data.Char 문자 처리와 관련된 함수들이 모여있습니다. 역시 문자, 문자열 관련 작업을 할 땐 먼저 이 모듈 내의 함수를 살펴보시는 걸 권합니다. • Data.Map 타 언어의 map(tree 기반의 key-value 자료구조)와 동일합니다. key-value 쌍 자료구조가 필요하다면 Data.Map을 참고합시다.
  • 7. Make Module 그러면 모듈을 만들기 위해선 어떻게 해야할까요? 간단한 예제를 통해 살펴봅시다. 우선, 모듈의 이름은 반드시 파일의 이름과 동일해야합니다. 파일의 맨 위에 module (module name) where 라고 써서 해당 파일의 모듈명을 명시해줄 수 있습니다. --Test.hs module Test where foo = "foo" bar = "bar"
  • 8. Make Module 모듈 내부에서 특정한 함수들만 외부로 내보내고 싶다면(나머지 함수들은 모듈 내부에 정의되어 있어도 외부에서 쓰지 못하게 만들고 싶다면) 모듈 이름 옆에 해당 함수들의 이름을 적어주면 됩니다. 아무 함수도 적지 않을 경우 모듈 내의 모든 함수가 export됩니다. --Test.hs - foo 만 외부에서 사용 가능 module Test (foo) where foo = "foo" bar = "bar"
  • 9. Make Module 라이브러리를 만들 때는 보통 여러 개의 모듈이 필요하고, 각각의 모듈에 대한 서브모듈 (submodule)이 필요할 때도 많습니다. 이럴 때 Haskell에서는 모듈을 디렉토리 상에서 계층 구조로 나눠 관리하며, 각 서브 모듈은 (자신이 속한 폴더의 이름).(모듈 이름) 형태의 이름을 붙여 관리합니다. --Test.hs - foo 만 외부에서 사용 가능 module Test where import Test.Foo --Test 폴더의 Foo.hs 파일 module Test.Foo (foo) where foo = "foo"