deniok: (ухмыляюсь)
Померил тут, похоже про магические хэши не надо рассказывать. Тут length' - текущая реализация из GHC, length0 - трех?летней давности:
{-# LANGUAGE MagicHash #-}
module Length where

import GHC.Prim
import GHC.Exts (Int(I#))
import Data.List

length0    :: [a] -> Int
length0 l  =  len l 0#
  where
    len           :: [a] -> Int# -> Int
    len []     a# =  I# a#
    len (_:xs) a# =  len xs (a# +# 1#)

length' :: [a] -> Int
length' xs = lenAcc xs 0 where
  lenAcc []     n = n
  lenAcc (_:ys) n = lenAcc ys (n+1)

length'' :: [a] -> Int
length'' = foldl' (const . succ) 0

length''' :: [a] -> Int
length''' []     = 0
length''' (_:xs) = 1 + length''' xs
Результаты
C:\Users\deniok\Documents\Haskell>ghc -O2 Length.hs
[1 of 1] Compiling Length           ( Length.hs, Length.o )

C:\Users\deniok\Documents\Haskell>ghci Length.hs
GHCi, version 7.10.3: http://www.haskell.org/ghc/  :? for help
Ok, modules loaded: Length.
> :set +s
> length [1..100000000]
100000000
(1.56 secs, 8,014,793,624 bytes)
> length0 [1..100000000]
100000000
(1.55 secs, 8,002,029,776 bytes)
> length' [1..100000000]
100000000
(1.55 secs, 8,001,085,992 bytes)
> length'' [1..100000000]
100000000
(2.00 secs, 9,601,216,960 bytes)
> length''' [1..100000000]
*** Exception: stack overflow
>
> length [1..50000000]
50000000
(0.86 secs, 3,938,034,240 bytes)
> length0 [1..50000000]
50000000
(0.84 secs, 3,937,631,120 bytes)
> length' [1..50000000]
50000000
(0.84 secs, 4,240,225,000 bytes)
> length'' [1..50000000]
50000000
(1.08 secs, 4,845,463,912 bytes)
> length''' [1..50000000]
50000000
(1.34 secs, 4,420,898,928 bytes)
deniok: (Рыжий)
GHC 7.10.1 :
class Applicative m => Monad m where
...
    return      :: a -> m a
    return      = pure
...
-- оставили как было (по социальным причинам :)
--  (>>) :: forall a b. m a -> m b -> m b
--  (>>) = (*>)
...
https://hackage.haskell.org/package/base-4.8.0.0/candidate/docs/src/GHC-Base.html#Monad
deniok: (Default)
А с каких это пор у нас в Data.Monoid поселился такой оператор
infixr 6 <>

(<>) :: Monoid m => m -> m -> m
(<>) = mappend
и где это задокументировано?
deniok: (ржунимагу)
Понравились имена аргументов в GHCi-шной реализации функции isInfixOf:
isInfixOf               :: (Eq a) => [a] -> [a] -> Bool
isInfixOf needle haystack = any (isPrefixOf needle) (tails haystack)

:-)
deniok: (typed lambda)
В GHCi можно задавать многострочные let-определения функций, пользуясь скобочками :{ для входа в моду такого определения и :} - для завершения этой моды
Prelude> :{
Prelude| let { g op n [] = n
Prelude|     ; g op n (h:t) = h `op` g op n t
Prelude|     }
Prelude| :}
Prelude> g (*) 1 [1..4]
24
Правда, layout не поддерживается.
deniok: (typed lambda)
Среди новинок стоит отметить синтаксический сахар Generalised (SQL-Like) List Comprehensions. Не могу не привести пример последнего из документации (это моя сессия GHCi):
Prelude> :s -XTransformListComp 
Prelude> :m GHC.Exts 
Prelude GHC.Exts> let employees = [ ("Simon", "MS", 80) , ("Erik", "MS", 100) , 
("Phil", "Ed", 40) , ("Gordon", "Ed", 45) , ("Paul", "Yale", 60)]
Prelude GHC.Exts> let output = [ (the dept, sum salary) | (name, dept, salary) 
< - employees , then group by dept , then sortWith by (sum salary) , then take 5 ] 
Prelude GHC.Exts> output 
[("Yale",60),("Ed",85),("MS",180)]
Мы можем увидеть, что Эрик получает в MS больше Саймона, и это, соратники, самое удивительное! Отмечу также, что в Эдинбургском университете зарплаты ниже, чем в Йельском.

GHC 6.10

Nov. 4th, 2008 11:48 pm
deniok: (typed lambda)
Пока в Америке все ждут результатов выборов, в Англии тоже не сидят сложа руки. Вышел в свет GHC 6.10.1 с новым параллельным сборщиком мусора, data parallel arrays, а главное - теперь доступны давно обещанные семейства типов (type families).

Качать тут

Release Notes тут

GHC 6.8.3

Jun. 27th, 2008 12:49 pm
deniok: (lambda cube)
GHC 6.8.3 released 17 June 2008, а я что-то профукал это дело. Правда там нового почти ничего,  пишут, что баги пофиксены, но тем не менее.

Если кто (как и я) был в танке, качайте.
deniok: (Default)
Материал к завтрашнему обсуждению на SpbHUG "Устройство компилятора GHC"






Стырено из первоисточника.

Profile

deniok: (Default)
deniok

February 2022

S M T W T F S
  12345
6789101112
13141516171819
20212223 242526
2728     

Syndicate

RSS Atom

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jun. 19th, 2025 03:53 pm
Powered by Dreamwidth Studios