SlideShare a Scribd company logo
1 of 9
Download to read offline
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

What's hot

파이썬 문자열 이해하기
파이썬 문자열 이해하기파이썬 문자열 이해하기
파이썬 문자열 이해하기
Yong Joon Moon
 
파이썬+정규표현식+이해하기 20160301
파이썬+정규표현식+이해하기 20160301파이썬+정규표현식+이해하기 20160301
파이썬+정규표현식+이해하기 20160301
Yong Joon Moon
 
Matplotlib 기초 이해하기_20160730
Matplotlib 기초 이해하기_20160730Matplotlib 기초 이해하기_20160730
Matplotlib 기초 이해하기_20160730
Yong Joon Moon
 
[아꿈사] The C++ Programming Language 11장 연산자 오버로딩
[아꿈사] The C++ Programming Language 11장 연산자 오버로딩[아꿈사] The C++ Programming Language 11장 연산자 오버로딩
[아꿈사] The C++ Programming Language 11장 연산자 오버로딩
해강
 

What's hot (20)

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

Viewers also liked

Employee Evaluation final
Employee Evaluation finalEmployee Evaluation final
Employee Evaluation final
Amun Arif
 
AEL Equity Price Forecast - 29.01.2016
AEL Equity Price Forecast - 29.01.2016AEL Equity Price Forecast - 29.01.2016
AEL Equity Price Forecast - 29.01.2016
Dulana Jayawardena
 
Caso Clínico: Uso da Cintilografia Miocárdica em Paciente com Arritmia Cardíaca
Caso Clínico: Uso da Cintilografia Miocárdica em Paciente com Arritmia CardíacaCaso Clínico: Uso da Cintilografia Miocárdica em Paciente com Arritmia Cardíaca
Caso Clínico: Uso da Cintilografia Miocárdica em Paciente com Arritmia Cardíaca
medNuclearHuap
 
第4回はじめてのAws jaws ug-iwata
第4回はじめてのAws jaws ug-iwata第4回はじめてのAws jaws ug-iwata
第4回はじめてのAws jaws ug-iwata
iwata jaws-ug
 

Viewers also liked (20)

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

Similar to Haskell study 7

Python3 6장 모듈만들기
Python3 6장 모듈만들기Python3 6장 모듈만들기
Python3 6장 모듈만들기
Jihoon Kong
 
이펙티브 C++ (7~9)
이펙티브 C++ (7~9)이펙티브 C++ (7~9)
이펙티브 C++ (7~9)
익성 조
 
Xe 구조에 대한 이해
Xe 구조에 대한 이해Xe 구조에 대한 이해
Xe 구조에 대한 이해
Dong Hyun Kim
 
HolubOnPatterns/chapter2_1
HolubOnPatterns/chapter2_1HolubOnPatterns/chapter2_1
HolubOnPatterns/chapter2_1
정환 임
 
Holub on-patterns-2-1
Holub on-patterns-2-1Holub on-patterns-2-1
Holub on-patterns-2-1
정환 임
 
Programming java day2
Programming java day2Programming java day2
Programming java day2
Jaehoonyam
 

Similar to Haskell study 7 (20)

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

More from Nam Hyeonuk

More from Nam Hyeonuk (16)

Next 게임 실전 프로젝트 슬라이드
Next 게임 실전 프로젝트 슬라이드Next 게임 실전 프로젝트 슬라이드
Next 게임 실전 프로젝트 슬라이드
 
Haskell study 11
Haskell study 11Haskell study 11
Haskell study 11
 
Haskell study 1
Haskell study 1Haskell study 1
Haskell study 1
 
Haskell study 0
Haskell study 0Haskell study 0
Haskell study 0
 
Multi thread
Multi threadMulti thread
Multi thread
 
Memory & object pooling
Memory & object poolingMemory & object pooling
Memory & object pooling
 
Database
DatabaseDatabase
Database
 
Exception&log
Exception&logException&log
Exception&log
 
Iocp advanced
Iocp advancedIocp advanced
Iocp advanced
 
Iocp 기본 구조 이해
Iocp 기본 구조 이해Iocp 기본 구조 이해
Iocp 기본 구조 이해
 
Tcp ip & io model
Tcp ip & io modelTcp ip & io model
Tcp ip & io model
 
Effective c++ chapter 1,2 요약
Effective c++ chapter 1,2 요약Effective c++ chapter 1,2 요약
Effective c++ chapter 1,2 요약
 
구문과 의미론(정적 의미론까지)
구문과 의미론(정적 의미론까지)구문과 의미론(정적 의미론까지)
구문과 의미론(정적 의미론까지)
 
Gpg 1.1
Gpg 1.1Gpg 1.1
Gpg 1.1
 
Stl vector, list, map
Stl vector, list, mapStl vector, list, map
Stl vector, list, map
 
Age Of Empires II : Age Of Kings Postmotem
Age Of Empires II : Age Of Kings PostmotemAge Of Empires II : Age Of Kings Postmotem
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"