Recreational Mini-Project of the week
- Lambda functions - функции без имена които няма да преизползваме
- Алгебрични типове - Множества от стойности получени чрез обединение и сечение.
- Синтаксис
data Type' = Value1 String String | Value2 Float
- Четем тип
Type'
може да има стойностValue1
илиValue2
Value1
иValue2
може да обединяват поредица от стойности.
- Синтаксис
- Можем да имаме рекурсивно дефинирани типове - Пример:
[]
- Typeclasses - "интерфейси".
Eq
,Ord
,Num
, etc.
data Tree a = Empty | Tree a (Tree a) (Tree a) deriving (Show)
data Student' = Student'
{ firstName :: String,
lastName :: String,
facultyNumber :: Int,
bio :: String
}
deriving (Show)
A Haskell module is a collection of related functions, types and typeclasses.
Синтаксис import <module name>
Пример:
import Data.List
numUniques :: (Eq a) => [a] -> Int
numUniques = length . nub
Импортиране в GHCi
ghci> :m + Data.List
ghci> :m + Data.List Data.Map Data.Set -- import multiple modules in GHCi
Селективно импортиране (импортирай само каквото ти трябва)
import Data.List (nub, sort)
Hiding
import Data.List hiding (nub) -- Import everything but `nub`
Не пръскай всичко в главния скоуп (също е начин да се справим с импортиране на ф-ии с имена които вече сме дефинирали)
import qualified Data.Map
Data.Map.filter -- refers to the filter in `Data.Map`
но може идентификаторите с които реферираме ф-ии да станат прекалено дълги.
Именоване на импортиран модул
import qualified Data.Map as M
M.filter -- much better 😌
Haskell Hierarchical Libraries - Документация на стандартната библиотека (какви модули има и кое къде е).
- Имплементирайте игра ConnectFour
-
Разгледайте файловете в папка
ConnectFour
-
Имплементирайте ф-я
play
от файлLib.hs
, така че всички тестове вSpec.hs
да минат. -
cabal install --lib HUnit
, ако нямате инсталиран пакета за unit тестове. -
Тестовете може да подкарате с
runhaskell Spec.hs
(трябва да сте позиционирани в папкатаConnectFour
) -
Ако командата отгоре гръмне с грешка -
Could not find module Test.HUnit
, пробвайте съсstack
.- Инсталирайте
stack
- https://docs.haskellstack.org/en/stable/README/ cabal install --lib HUnit
stack Spec.hs
- Инсталирайте