Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
A
Arkiaskar
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package Registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
sutugust
Arkiaskar
Commits
a6515654
Commit
a6515654
authored
2 years ago
by
Suvi
Browse files
Options
Downloads
Patches
Plain Diff
Tyyppien kanssa säätöä
parent
01768910
No related branches found
Branches containing commit
No related tags found
No related merge requests found
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
src/Main.hs
+63
-51
63 additions, 51 deletions
src/Main.hs
src/Main.hs.bak
+161
-1
161 additions, 1 deletion
src/Main.hs.bak
with
224 additions
and
52 deletions
src/Main.hs
+
63
−
51
View file @
a6515654
...
...
@@ -14,21 +14,20 @@ import qualified Data.ByteString.Lazy as BS
--instance Data.Aeson.FromJSON Tehtava
--Omat luokat--------------------------------------------------------------------
data
Tekija
=
Tekija
{
id
::
Int
,
nimi
::
String
}
deriving
(
Show
)
data
Tekija
=
Tekija
{
nimi
::
String
}
deriving
(
Show
)
--data VakioTekija = Tekija | False deriving (Show, Eq)
--korjattava!
data
Askare
=
Askare
{
askare
::
String
data
Askare
=
Askare
{
hommanNimi
::
String
,
tarkea
::
Bool
,
toistuvuus
::
Int
,
toistuvuus
::
Int
,
vakioTekija
::
String
}
deriving
(
Show
)
data
Tehtava
=
Tehtava
{
homma
::
Askare
data
Tehtava
=
Tehtava
{
homma
::
String
--
Askare
elta
,
paiva
::
Data
.
Time
.
Calendar
.
Day
,
tehty
::
Bool
,
tekija
::
Tekija
,
tehtava
::
String
,
tarkeys
::
Bool
--Askareelta
,
tekija
::
String
--Tekijalta
,
kuvaus
::
String
}
deriving
(
Show
)
--Virheilmoitukset------------------------------------------------------------------
...
...
@@ -80,50 +79,61 @@ tallennaTehtavat tehtava = BS.writeFile "tehtavat.json" (Data.Aeson.encode tehta
-}
-- Tekijät ----------------------------------------------------------------------------
tekijat
::
[
Tekija
]
tekijat
=
[
Tekija
{
Main
.
id
=
1
,
nimi
=
"Maija"
},
Tekija
{
Main
.
id
=
2
,
nimi
=
"Matti"
}]
--miten perin mahdollisen vakiotekijän tehtävän tekijäksi???
uusiTekija
::
String
->
Tekija
uusiTekija
a
=
Tekija
{
nimi
=
a
}
-- Askareet ----------------------------------------------------------------------------------
{- Homman nimi, Tärkeys
, Toistuvuus 0:ei koskaan, 1:kerran viikossa 2:joka toinen viikko 3:kerran kuussa
, VakioTekijä (, vakioTekija :: VakioTekija) -}
askareet
::
[
Askare
]
askareet
=
[
Askare
{
askare
=
"Imurointi"
,
tarkea
=
False
,
toistuvuus
=
1
}
,
Askare
{
askare
=
"Vuokran maksu"
,
tarkea
=
True
,
toistuvuus
=
3
}
,
Askare
{
askare
=
"Pyykin pesu"
,
tarkea
=
False
,
toistuvuus
=
0
}
]
, VakioTekijä -}
uusiAskare
::
String
->
Bool
->
Int
->
String
->
Askare
uusiAskare
a
b
c
d
=
Askare
{
hommanNimi
=
a
,
tarkea
=
b
,
toistuvuus
=
c
,
vakioTekija
=
mahdTekija
}
where
mahdTekija
|
d
==
""
=
"eo"
|
otherwise
=
d
-- Tehtävät --------------------------------------------------------------------------------------
{- Mikä askare, Päivämäärä, Onko tehty, Kuka on tekijä, Kuvaus -}
uusiTehtava
::
String
->
Data
.
Time
.
Calendar
.
Day
->
Bool
->
String
->
String
->
Tehtava
uusiTehtava
askare
pvm
tarkeako
duunari
teksti
=
Tehtava
{
homma
=
askare
,
paiva
=
pvm
,
tehty
=
False
,
tarkeys
=
tarkeako
,
tekija
=
duunari
,
kuvaus
=
teksti
}
tehtavat
::
[
Tehtava
]
tehtavat
=
[
Tehtava
{
homma
=
Askare
{
askare
=
"Vuokran maksu"
,
tarkea
=
True
,
toistuvuus
=
3
}
,
paiva
=
t
2022
10
10
,
tehty
=
False
,
tekija
=
Tekija
{
Main
.
id
=
2
,
nimi
=
"Matti"
}
,
tehtava
=
"Maksa lokakuun vuokra"
}
,
Tehtava
{
homma
=
Askare
{
askare
=
"Pyykin pesu"
,
tarkea
=
False
,
toistuvuus
=
0
}
,
paiva
=
t
2022
10
5
,
tehty
=
False
,
tekija
=
Tekija
{
Main
.
id
=
1
,
nimi
=
"Maija"
}
,
tehtava
=
"Pese valkoiset 40:n asteen pyykit"
}
]
tehtavat
=
[]
annaKuvaukset
::
[
Tehtava
]
->
[
String
]
annaKuvaukset
[]
=
[]
annaKuvaukset
(
eka
:
loput
)
=
kuvaus
eka
:
hommatLopuista
where
t
=
Data
.
Time
.
Calendar
.
fromGregorian
---tuleeko tää tähän???
hommatLopuista
=
annaKuvaukset
loput
karsiTehtavaListaa
::
(
Data
.
Time
.
Calendar
.
Day
->
Bool
)
->
[
Tehtava
]
->
[
Tehtava
]
karsiTehtavaListaa
paivat
(
eka
:
loput
)
|
paivat
==
verrattava
=
eka
:
karsiTehtavaListaa
paivat
loput
|
otherwise
=
karsiTehtavaListaa
paivat
loput
where
verrattava
=
paiva
eka
--Listat------------------------------------------------------------------------------
lisaaListaan
::
[
a
]
->
a
->
[
a
]
lisaaListaan
vanhalista
lisattava
=
lisattava
:
vanhalista
--Muuta-------------------------------------------------------------------------------
-- Kalenteri -------------------------------------------------------------------------
-- Antaa tehtävälistasta annettujen päivien tehtävät
annaTehtavista
::
[
Tehtava
]
->
(
b
->
Bool
)
->
[
e
]
annaListasta
tehtavaLista
paivat
=
otaJ
ä
lkimm
ä
iset
tulosPareina
--Lisättäviä ominaisuuksia:
-- ilmoitus siitä, jos jollakin on jokin toistuvuus, mutta tehtävää ei olla lisätty tai lisäys ilman kuvausta(eli tehtävä)
-- -> tällöin oltava ehdottomasti muokkausmahdollisuus!!!
annaKuvausListasta
::
[
Tehtava
]
->
(
Data
.
Time
.
Calendar
.
Day
->
Bool
)
->
[
String
]
annaKuvausListasta
tapahtumaLista
pvm
=
otaTapahtumat
tulosLista
where
mit
ä
Otetaan
(
_a
,
b
,
_c
,
_d
,
_e
)
=
paivat
b
tulosPareina
=
filter
mit
ä
Otetaan
tehtavaLista
otaJ
ä
lkimm
ä
iset
=
tehtavaLista
.
tehtava
--mitaOtetaan (homma, paiva, tehty, tarkeys, tekija, kuvaus) = pvm paiva
tulosLista
::
[
Tehtava
]
tulosLista
=
karsiTehtavaListaa
pvm
tapahtumaLista
otaTapahtumat
lista
=
annaKuvaukset
lista
-- Antaa annetun päivän
annaTanaan
::
Data
.
Time
.
Calendar
.
Day
->
(
Data
.
Time
.
Calendar
.
Day
->
Bool
)
...
...
@@ -131,16 +141,16 @@ annaTanaan tanaan vertailtava = tanaan == vertailtava
-- Antaa päivät, joita annetun päivän viikolla on vielä jäljellä
annaViikko
::
Data
.
Time
.
Calendar
.
Day
->
(
Data
.
Time
.
Calendar
.
Day
->
Bool
)
annaViikko
p
aiva
vertailtava
=
(
vertailtava
>=
p
aiva
)
&&
(
vertailtava
<=
sunnuntai
)
annaViikko
p
vm
vertailtava
=
(
vertailtava
>=
p
vm
)
&&
(
vertailtava
<=
sunnuntai
)
where
sunnuntai
=
Data
.
Time
.
Calendar
.
addDays
luku
p
aiva
sunnuntai
=
Data
.
Time
.
Calendar
.
addDays
luku
p
vm
luku
|
(
Data
.
Time
.
Calendar
.
dayOfWeek
p
aiva
)
==
Data
.
Time
.
Calendar
.
Monday
=
6
|
(
Data
.
Time
.
Calendar
.
dayOfWeek
p
aiva
)
==
Data
.
Time
.
Calendar
.
Tuesday
=
5
|
(
Data
.
Time
.
Calendar
.
dayOfWeek
p
aiva
)
==
Data
.
Time
.
Calendar
.
Wednesday
=
4
|
(
Data
.
Time
.
Calendar
.
dayOfWeek
p
aiva
)
==
Data
.
Time
.
Calendar
.
Thursday
=
3
|
(
Data
.
Time
.
Calendar
.
dayOfWeek
p
aiva
)
==
Data
.
Time
.
Calendar
.
Friday
=
2
|
(
Data
.
Time
.
Calendar
.
dayOfWeek
p
aiva
)
==
Data
.
Time
.
Calendar
.
Saturday
=
1
|
(
Data
.
Time
.
Calendar
.
dayOfWeek
p
vm
)
==
Data
.
Time
.
Calendar
.
Monday
=
6
|
(
Data
.
Time
.
Calendar
.
dayOfWeek
p
vm
)
==
Data
.
Time
.
Calendar
.
Tuesday
=
5
|
(
Data
.
Time
.
Calendar
.
dayOfWeek
p
vm
)
==
Data
.
Time
.
Calendar
.
Wednesday
=
4
|
(
Data
.
Time
.
Calendar
.
dayOfWeek
p
vm
)
==
Data
.
Time
.
Calendar
.
Thursday
=
3
|
(
Data
.
Time
.
Calendar
.
dayOfWeek
p
vm
)
==
Data
.
Time
.
Calendar
.
Friday
=
2
|
(
Data
.
Time
.
Calendar
.
dayOfWeek
p
vm
)
==
Data
.
Time
.
Calendar
.
Saturday
=
1
|
otherwise
=
0
--Suoritettava:
...
...
@@ -159,7 +169,9 @@ main = do
let
tanaan
=
Data
.
Time
.
Clock
.
utctDay
aika
putStrLn
"Arkiaskareet"
putStrLn
"Tämän päivän tehtävät: "
--
putS
c
rLn (unlines (annaListasta tehtavat annaTanaan tanaan))
putS
t
rLn
(
unlines
(
anna
Kuvaus
Listasta
tehtavat
(
annaTanaan
tanaan
))
)
putStrLn
"Tämän viikon tulevat tehtävät: "
--putScrLn (unlines (annaListasta tehtavat (annaViikko tanaan)))
putStrLn
"Anna haluamasi komento, ohje -komennolla saat listan kaikista komennoista."
\ No newline at end of file
--putStrLn (unlines (annaKuvausListasta tehtavat (annaViikko tanaan)))
putStrLn
"Anna haluamasi komento, ohje -komennolla saat listan kaikista komennoista."
--POISTA TÄSTÄ ALASPÄIN KUN EI ENÄÄ TARVETTA----------------------------------------------------------
\ No newline at end of file
This diff is collapsed.
Click to expand it.
src/Main.hs.bak
+
161
−
1
View file @
a6515654
module Main (main) where
import qualified Data.Time.Calendar
import qualified Data.Time.Clock
import qualified Data.Aeson
import qualified Data.ByteString.Lazy as BS
--instance Data.Aeson.ToJSON Tekija
--instance Data.Aeson.ToJSON Askare
--instance Data.Aeson.ToJSON Tehtava
--instance Data.Aeson.FromJSON Tekija
--instance Data.Aeson.FromJSON Askare
--instance Data.Aeson.FromJSON Tehtava
--Omat luokat--------------------------------------------------------------------
data Tekija = Tekija { id :: Int , nimi :: String } deriving (Show)
--data VakioTekija = Tekija | False deriving (Show, Eq)
--korjattava!
data Askare = Askare { askare :: String
, tarkea :: Bool
, toistuvuus :: Int
} deriving (Show)
data Tehtava = Tehtava { homma :: Askare
, paiva :: Data.Time.Calendar.Day
, tehty :: Bool
, tekija :: Tekija
, tehtava :: String
} deriving (Show)
--Virheilmoitukset------------------------------------------------------------------
--Tiedoston luku/kirjoitus ---------------------------------------------------------
{-
{--}
tiedostojenLuku :: IO()
tiedostojenLuku = do
lataaTekijat
lataaAskareet
lataaTehtavat
putStrLn "Lataus suoritettu"
lataaTekijat :: IO (Maybe Tekija)
lataaTekijat = do
jsonTekijat <- BS.readFile "tekijat.json"
return (Data.Aeson.decode jsonTekijat)
lataaAskareet :: IO (Maybe Tekija)
lataaAskareet = do
jsonAskareet <- BS.readFile "askareet.json"
return (Data.Aeson.decode jsonAskareet)
lataaTehtavat :: IO (Maybe Tehtava)
lataaTehtavat = do
jsonTehtavat <- BS.readFile "tehtavat.json"
return (Data.Aeson.decode jsonTehtavat)
{-
Tallennetaan tiedostoon Aesonin avulla koodattua tietoa.
Tekijöille, Askareille ja Tehtäville pitää olla omat tiedostot ja ne on ladattava
oikeassa järjestyksessä.
Koodauksen jälkeen tiedostoon tallennus tapahtuu näin:
writeFile "tiedosto.json" tallennettava_asia
Tuleeko tähän ylös siis vain koodaus sekä dekoodaus ja varsinainen tallentaminen tapahtuu
luokkien sisällä?
-}
tallennaTekijat :: Tekija -> IO()
tallennaTekija tekija = BS.writeFile "tekijat.json" (Data.Aeson.encode tekija)
tallennaAskareet :: Askare -> IO()
tallennaAskareet askare = BS.writeFile "askareet.json" (Data.Aeson.encode askare)
tallennaTehtavat :: Tehtava -> IO()
tallennaTehtavat tehtava = BS.writeFile "tehtavat.json" (Data.Aeson.encode tehtava)
-}
-- Tekijät ----------------------------------------------------------------------------
tekijat :: [Tekija]
tekijat = [ Tekija {Main.id = 1, nimi = "Maija"}, Tekija {Main.id = 2, nimi = "Matti"}]
--miten perin mahdollisen vakiotekijän tehtävän tekijäksi???
-- Askareet ----------------------------------------------------------------------------------
{- Homman nimi, Tärkeys
, Toistuvuus 0:ei koskaan, 1:kerran viikossa 2:joka toinen viikko 3:kerran kuussa
, VakioTekijä (, vakioTekija :: VakioTekija) -}
askareet :: [Askare]
askareet = [ Askare { askare="Imurointi", tarkea=False, toistuvuus=1 }
, Askare { askare="Vuokran maksu", tarkea=True, toistuvuus=3 }
, Askare { askare="Pyykin pesu", tarkea=False, toistuvuus=0 }
]
-- Tehtävät --------------------------------------------------------------------------------------
{- Mikä askare, Päivämäärä, Onko tehty, Kuka on tekijä, Kuvaus -}
tehtavat :: [Tehtava]
tehtavat = [ Tehtava { homma = Askare { askare="Vuokran maksu", tarkea=True, toistuvuus=3 }
, paiva = t 2022 10 10
, tehty = False
, tekija = Tekija {Main.id = 2, nimi = "Matti"}
, tehtava = "Maksa lokakuun vuokra"
}
, Tehtava { homma = Askare { askare="Pyykin pesu", tarkea=False, toistuvuus=0 }
, paiva = t 2022 10 5
, tehty = False
, tekija = Tekija {Main.id = 1, nimi = "Maija"}
, tehtava = "Pese valkoiset 40:n asteen pyykit"
}
]
where
t = Data.Time.Calendar.fromGregorian ---tuleeko tää tähän???
-- Kalenteri -------------------------------------------------------------------------
-- Antaa tehtävälistasta annettujen päivien tehtävät
annaTehtavista :: [Tehtava] -> (b -> Bool) -> [e]
annaListasta tehtavaLista paivat = otaJälkimmäiset tulosPareina
where
mitäOtetaan (_a, b, _c, _d, _e) = paivat b
tulosPareina = filter mitäOtetaan tehtavaLista
otaJälkimmäiset = tehtavaLista.tehtava
-- Antaa annetun päivän
annaTanaan :: Data.Time.Calendar.Day -> (Data.Time.Calendar.Day -> Bool)
annaTanaan tanaan vertailtava = tanaan == vertailtava
-- Antaa päivät, joita annetun päivän viikolla on vielä jäljellä
annaViikko :: Data.Time.Calendar.Day -> (Data.Time.Calendar.Day -> Bool)
annaViikko paiva vertailtava = (vertailtava >= paiva) && (vertailtava <= sunnuntai)
where
sunnuntai = Data.Time.Calendar.addDays luku paiva
luku
| (Data.Time.Calendar.dayOfWeek paiva) == Data.Time.Calendar.Monday = 6
| (Data.Time.Calendar.dayOfWeek paiva) == Data.Time.Calendar.Tuesday = 5
| (Data.Time.Calendar.dayOfWeek paiva) == Data.Time.Calendar.Wednesday = 4
| (Data.Time.Calendar.dayOfWeek paiva) == Data.Time.Calendar.Thursday = 3
| (Data.Time.Calendar.dayOfWeek paiva) == Data.Time.Calendar.Friday = 2
| (Data.Time.Calendar.dayOfWeek paiva) == Data.Time.Calendar.Saturday = 1
| otherwise = 0
--Suoritettava:
-- Alkuinfo
-- Tämän päivän ja tämän viikon tehtävät
-- Komentojen anto:
-- -ohje
-- -Lisää/Poista tekijä/askare/tehtävä
-- -Katso viikon x tehtävät
-- -Poistu ohjelmasta
main :: IO ()
main = do
putStrLn "hello world"
--TODO: tiedostojen tietojen lataus
aika <- Data.Time.Clock.getCurrentTime
let tanaan = Data.Time.Clock.utctDay aika
putStrLn "Arkiaskareet"
putStrLn "Tämän päivän tehtävät: "
--putScrLn (unlines (annaListasta tehtavat annaTanaan tanaan))
putStrLn "Tämän viikon tulevat tehtävät: "
--putScrLn (unlines (annaListasta tehtavat (annaViikko tanaan)))
putStrLn "Anna haluamasi komento, ohje -komennolla saat listan kaikista komennoista."
\ No newline at end of file
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment