packages feed

aftovolio-0.5.0.0: Aftovolio/Ukrainian/SyllableWord8.hs

{-# LANGUAGE BangPatterns #-}
{-# LANGUAGE Strict #-}
{-# LANGUAGE TypeSynonymInstances #-}
{-# LANGUAGE NoImplicitPrelude #-}
{-# OPTIONS_HADDOCK show-extensions #-}

{- |
Module      :  Aftovolio.Ukrainian.SyllableWord8
Copyright   :  (c) Oleksandr Zhabenko 2021-2024
License     :  MIT
Stability   :  Experimental
Maintainer  :  oleksandr.zhabenko@yahoo.com

This module works with syllable segmentation in Ukrainian. Uses 'Word8' whenever possible.
Is inspired by the DobutokO.Sound.DIS5G6G module from @dobutokO2@ package.
See: 'https://hackage.haskell.org/package/dobutokO2-0.43.0.0/docs/DobutokO-Sound-DIS5G6G.html'.
The initial 'Word8' data are gotten from there.
-}
module Aftovolio.Ukrainian.SyllableWord8 where

import Aftovolio.Ukrainian.Melodics (Sound8)
import CaseBi.Arr
import Data.Foldable (foldl')
import GHC.Base
import GHC.Int
import GHC.Num ((+))
import GHC.Word

s0DuratD1 :: Sound8 -> Word8
s0DuratD1 =
    getBFstLSorted'
        5
        [ (1, 15)
        , (2, 10)
        , (3, 13)
        , (4, 12)
        , (5, 11)
        , (6, 10)
        , (7, 1)
        , (8, 6)
        , (9, 6)
        , (10, 7)
        , (11, 7)
        , (15, 6)
        , (16, 6)
        , (17, 8)
        , (18, 8)
        , (19, 7)
        , (20, 7)
        , (21, 8)
        , (22, 8)
        , (23, 5)
        , (24, 5)
        , (25, 6)
        , (26, 6)
        , (27, 6)
        , (28, 7)
        , (29, 7)
        , (30, 8)
        , (31, 8)
        , (32, 8)
        , (33, 8)
        , (34, 5)
        , (35, 5)
        , (36, 9)
        , (37, 9)
        , (38, 5)
        , (39, 6)
        , (40, 6)
        , (41, 7)
        , (42, 7)
        , (43, 6)
        , (44, 6)
        , (45, 4)
        , (46, 4)
        , (47, 15)
        , (48, 15)
        , (49, 8)
        , (50, 12)
        , (51, 12)
        , (52, 8)
        , (53, 8)
        , (54, 8)
        , (66, 10)
        ]
{-# INLINE s0DuratD1 #-}

s0DuratD2 :: Sound8 -> Word8
s0DuratD2 =
    getBFstLSorted'
        5
        [ (1, 15)
        , (2, 15)
        , (3, 15)
        , (4, 14)
        , (5, 11)
        , (6, 11)
        , (7, 1)
        , (8, 4)
        , (9, 4)
        , (10, 5)
        , (11, 5)
        , (15, 6)
        , (16, 6)
        , (17, 4)
        , (18, 4)
        , (19, 4)
        , (20, 4)
        , (21, 3)
        , (22, 3)
        , (23, 5)
        , (24, 5)
        , (25, 4)
        , (26, 4)
        , (27, 5)
        , (28, 6)
        , (29, 6)
        , (30, 8)
        , (31, 8)
        , (32, 3)
        , (33, 3)
        , (34, 4)
        , (35, 4)
        , (36, 5)
        , (37, 5)
        , (38, 3)
        , (39, 7)
        , (40, 7)
        , (41, 7)
        , (42, 7)
        , (43, 9)
        , (44, 9)
        , (45, 3)
        , (46, 3)
        , (47, 5)
        , (48, 5)
        , (49, 3)
        , (50, 3)
        , (51, 3)
        , (52, 5)
        , (53, 5)
        , (54, 4)
        , (66, 4)
        ]
{-# INLINE s0DuratD2 #-}

s0DuratD3 :: Sound8 -> Word8
s0DuratD3 =
    getBFstLSorted'
        5
        [ (1, 15)
        , (2, 14)
        , (3, 15)
        , (4, 12)
        , (5, 12)
        , (6, 12)
        , (7, 1)
        , (8, 5)
        , (9, 5)
        , (10, 6)
        , (11, 6)
        , (15, 8)
        , (16, 8)
        , (17, 5)
        , (18, 5)
        , (19, 5)
        , (20, 5)
        , (21, 6)
        , (22, 6)
        , (23, 6)
        , (24, 6)
        , (25, 4)
        , (26, 4)
        , (27, 7)
        , (28, 7)
        , (29, 7)
        , (30, 9)
        , (31, 9)
        , (32, 4)
        , (33, 4)
        , (34, 4)
        , (35, 4)
        , (36, 5)
        , (37, 5)
        , (38, 4)
        , (39, 7)
        , (40, 7)
        , (41, 9)
        , (42, 9)
        , (43, 10)
        , (44, 10)
        , (45, 4)
        , (46, 4)
        , (47, 7)
        , (48, 7)
        , (49, 4)
        , (50, 4)
        , (51, 4)
        , (52, 8)
        , (53, 8)
        , (54, 5)
        , (66, 5)
        ]
{-# INLINE s0DuratD3 #-}

s0DuratD4 :: Sound8 -> Word8
s0DuratD4 =
    getBFstLSorted'
        5
        [ (1, 12)
        , (2, 12)
        , (3, 12)
        , (4, 12)
        , (5, 12)
        , (6, 12)
        , (7, 1)
        , (8, 5)
        , (9, 5)
        , (10, 10)
        , (11, 10)
        , (15, 5)
        , (16, 5)
        , (17, 8)
        , (18, 8)
        , (19, 8)
        , (20, 8)
        , (21, 13)
        , (22, 13)
        , (23, 10)
        , (24, 10)
        , (25, 5)
        , (26, 5)
        , (27, 4)
        , (28, 10)
        , (29, 10)
        , (30, 15)
        , (31, 15)
        , (32, 8)
        , (33, 8)
        , (34, 4)
        , (35, 4)
        , (36, 6)
        , (37, 6)
        , (38, 4)
        , (39, 12)
        , (40, 12)
        , (41, 14)
        , (42, 14)
        , (43, 11)
        , (44, 11)
        , (45, 6)
        , (46, 6)
        , (47, 4)
        , (48, 4)
        , (49, 6)
        , (50, 11)
        , (51, 11)
        , (52, 15)
        , (53, 15)
        , (54, 7)
        , (66, 5)
        ]
{-# INLINE s0DuratD4 #-}

class (Eq a) => SyllableDurations4 a where
    sDuratsD :: a -> Word8
    sDuratsD2 :: a -> Word8
    sDuratsD3 :: a -> Word8
    sDuratsD4 :: a -> Word8
    syllableDurationsGDc :: (a -> Word8) -> [[[a]]] -> [[Word8]]
    syllableDurationsGDc g = map (map (k g))
      where
        k f = foldl' (\y x -> f x + y) 0
    {-# INLINE syllableDurationsGDc #-}

instance SyllableDurations4 Sound8 where
    sDuratsD = s0DuratD1
    sDuratsD2 = s0DuratD2
    sDuratsD3 = s0DuratD3
    sDuratsD4 = s0DuratD4

-- | General variant of the 'syllableDurationsD' function.
syllableDurationsGD :: (Sound8 -> Word8) -> [[[Sound8]]] -> [[Word8]]
syllableDurationsGD g = syllableDurationsGDc g
{-# INLINE syllableDurationsGD #-}

syllableDurationsD :: [[[Sound8]]] -> [[Word8]]
syllableDurationsD = syllableDurationsGDc s0DuratD1
{-# INLINE syllableDurationsD #-}

syllableDurationsD2 :: [[[Sound8]]] -> [[Word8]]
syllableDurationsD2 = syllableDurationsGDc s0DuratD2
{-# INLINE syllableDurationsD2 #-}

syllableDurationsD3 :: [[[Sound8]]] -> [[Word8]]
syllableDurationsD3 = syllableDurationsGDc s0DuratD3
{-# INLINE syllableDurationsD3 #-}

syllableDurationsD4 :: [[[Sound8]]] -> [[Word8]]
syllableDurationsD4 = syllableDurationsGDc s0DuratD4
{-# INLINE syllableDurationsD4 #-}