Просмотр исходного кода

move comparison into it's own module as well

Lucas Stadler лет назад: 11
Родитель
Сommit
2173b6f424
3 измененных файлов с 20 добавлено и 17 удалено
  1. 6 1
      elm/Post.elm
  2. 1 16
      elm/Stream.elm
  3. 13 0
      elm/Util/Compare.elm

+ 6 - 1
elm/Post.elm

1
module Post where
1
module Post where
2
2
3
import Date
3
import Date (Date)
4
import Date (Date)
4
import Util.Html (viewDate)
5
import Html (..)
5
import Html (..)
6
import Util.Compare (compareBy, flipCompare)
7
import Util.Html (viewDate)
6
8
7
type alias Post = { title:String, content:String, created:Date }
9
type alias Post = { title:String, content:String, created:Date }
8
10
11
compareByDate = compareBy (.created >> Date.toTime)
12
compareByDateReverse = flipCompare <| compareBy (.created >> Date.toTime)
13
9
view : Date -> Post -> Html
14
view : Date -> Post -> Html
10
view ref post = div [] [
15
view ref post = div [] [
11
                 h3 [] [text post.title],
16
                 h3 [] [text post.title],

+ 1 - 16
elm/Stream.elm

24
         {title = "Ancient history", content = "Teenage angst!!!!", created = date "2009-06-07T02:54:29"}
24
         {title = "Ancient history", content = "Teenage angst!!!!", created = date "2009-06-07T02:54:29"}
25
        ]
25
        ]
26
26
27
flipOrder : Order -> Order
28
flipOrder o = case o of
29
                LT -> GT
30
                EQ -> EQ
31
                GT -> LT
32
33
flipCompare : (a -> a -> Order) -> a -> a -> Order
34
flipCompare compare' a b = flipOrder <| compare' a b
35
36
compareBy : (a -> comparable) -> a -> a -> Order
37
compareBy f a b = compare (f a) (f b)
38
39
sortByDate = List.sortBy (.created >> Date.toTime)
40
sortByDateReverse = List.sortWith (flipCompare <| compareBy (.created >> Date.toTime))
41
42
referenceDate = date "2015-03-01T14:09"
27
referenceDate = date "2015-03-01T14:09"
43
28
44
main = div [] (List.map (Post.view referenceDate) (sortByDateReverse posts))
29
main = div [] (List.map (Post.view referenceDate) (List.sortWith Post.compareByDateReverse posts))

+ 13 - 0
elm/Util/Compare.elm

1
module Util.Compare where
2
3
flipOrder : Order -> Order
4
flipOrder o = case o of
5
                LT -> GT
6
                EQ -> EQ
7
                GT -> LT
8
9
flipCompare : (a -> a -> Order) -> a -> a -> Order
10
flipCompare compare' a b = flipOrder <| compare' a b
11
12
compareBy : (a -> comparable) -> a -> a -> Order
13
compareBy f a b = compare (f a) (f b)